[Résolu] Ecrire un plugin (Créer un compte)

  • Statut : non résolu
5 sujets de 1 à 5 (sur un total de 5)
  • Auteur
    Messages
  • #446649
    Riduidel
    Membre
    Initié WordPress
    4 contributions

    Salut, je souhaiterais écrire un plugin qui me permettrait, en entrant l’isbn d’un livre, d’en récupérer la fiche bibliographique “complète”.
    Pour ça, j’ai déja quelques idées :
    je vais ajouter un “custom field” à mon post, nommé isbn, dans lequel je mettrai la valeur de l’isbn.
    Ce champ sera traité lorsque le post sera sauvé, les données seront récupérées (ça, je sais comment faire), et toutes les infos seront ajoutées en tant que custom fields ou dans des tables séparées (je n’ai pas encore décidé, et ça n’est pas trop important).
    Ensuite, lorsque le post sera affiché, je transformerai un tag, “” en un div contenant toute ma notice.
    Seulement voilà, si je vois à peu près quels hooks mettre en place, je ne sais en revanche pas comment accéder aux données de WordPress.
    Est-ce que vous auriez une idée là-dessus ?
    Merci

    #567348
    z720
    Membre
    Maître WordPress
    579 contributions

    Si tu décide de stocker ton numéro isbn dans un custom field, tu dois utiliser les fonctions de WordPress mais elle ne sont pas très pratiques.

    Du coup, j’ai développé mes propres fonctions que j’insère dans la classe principale de mes plugins:

    // Manage meta data	
    // Insert meta value from post ID, meta Key : return the meta id created
    	function add_meta($post,$metakey,$metavalue) {
    		global $wpdb;
    			$result = $wpdb->query(”
    				INSERT INTO $wpdb->postmeta 
    				(post_id,meta_key,meta_value) 
    				VALUES (‘$post’,’$metakey’,’$metavalue’)
    			“);
    			return $wpdb->insert_id;
    	}
    
    // Update the meta value	
    	function upd_meta($post,$metakey,$metavalue) {
    		global $wpdb;
    		$result = $wpdb->query(“UPDATE $wpdb->postmeta SET meta_value = ‘$metavalue’ WHERE post_id = ‘$post’ and meta_key = ‘$metakey'”);
    			return $result;
    	}	
    
    // Retrieve meta value from key and post ID	
    	function get_meta($post,$metakey) {
    		global $wpdb;
    		$result = $wpdb->get_row(“select meta_value from $wpdb->postmeta where post_id = ‘$post’ and meta_key = ‘$metakey'”);
    		return $result->meta_value;
    			
    	}

    Si tu as besoin d’un coup demain, n’hésite pas.

    NB: Je suis actuellement en train de compiler des bonnes pratiques pour la création de plugins ainsi qu’un squelette vide de plugin avec les fonctions de base.

    #567349
    Riduidel
    Membre
    Initié WordPress
    4 contributions

    Pour ce qui est de la lecture de métadonnées, est-ce que ce que tu as fait ne serait pas redondant avec ce qui est indiqué là : http://codex.wordpress.org/Using_Custom_Fields#Advanced_Techniques_for_Custom_Fields ?
    Quant à l’update, est-ce que ça peut marcher pour des métadonnées multivaluées (apparement possibles dans WP 1.5) ?
    Bref, en tout état de cause, je me dirige actuellement vers un système analogue au List manager (http://www.navidazimi.com/projects/wp-lists/). Ce plugin ajoute à la base Wordprress deux tables, qu’il peuple à la main (moi, je le ferais sans doute automatiquement), et permet leur utilisation via un tag créé pour l’occasion ().
    Le problème, c’est qu’apparement WordPress ne veut pas prendre en compte l’action que j’ai ajouté (“save_post”, en l’occurence) pour générer tout le bazar à partir de l’isbn. Sans doute que je vais devoir lui donner une priorité …

    #567350
    z720
    Membre
    Maître WordPress
    579 contributions

    Attention lors de l’action save_post WordPress utilise une astuce d’optimisation :
    au milieu du code lorsque tout semble ok WordPress envoie au navigateur une redirection pour afficher la page suivante alors que le traitement continu sur le serveur.

    Si tu mets un ‘echo …’ dans ton plugin, rien ne s’affichera dans ton navigateur, pourtant le code sera évalué.

    Sinon jpour la solution technique je serais ausi parti sur une table “spécifque” avec le post ID et l’ISBN en clé.

    NB: ces fonctions me conviennent parfaitement, bien évidemment, ça ne veut pas dire qu’elle doivent plaire à tout le monde. Effectivement WordPress gère les meta multivalué, mais je n’en avais pas besoin et je ne voulais surtout éviter les doublons dans la table.

    #567351
    Riduidel
    Membre
    Initié WordPress
    4 contributions

    Finallementt, d’après ce que j’ai compris, le save_post n’est utilisé que lors de la première sauvegarde. Pour les autres, c’est “edit_post”.
    Donc en utilisant les deux, ça colle bien.
    Pour le debug, pas de problème, je m’envoie des mails grâce à la méthode mail de WordPress.
    Bon, donc je vais devoir me créer un petit modèle de base pour le mettre dans MySQL. C’est peut-être ça qui m’embête le plus, en fait, le SQL :-(

5 sujets de 1 à 5 (sur un total de 5)
  • Vous devez être connecté pour répondre à ce sujet.