Après avoir créer nos nouveaux types de contenu et leur avoir assigner une nouvelle metabox et des champs (custom fields), cette deuxième vidéo va se concentrer sur l’affichage de ces nouvelles données. Découvrez comment créer un template pour votre nouveau type de contenu et comment afficher les valeurs de vos custom fields.
- Fonction WordPress get_post_meta: get_post_meta
- Fonction WordPress wp_get_attachment_image_src : wp_get_attachment_image_src
- Hierarchie des fichiers de template dans WordPress: http://codex.wordpress.org/Template_Hierarchy
- Code créé dans ce tutoriel : http://pastebin.com/8kF425BY
Après notre premier tutoriel, nous voila avec un nouveau type de contenu Livres et des nouveaux champs Date de publication, Couverture du livre et Auteur du livre. « Génial », me direz-vous, « mais ces informations n’apparaissent nulle part dans mon thème! ». C’est normal : votre thème n’a aucune idée de l’existence des nouveaux champs que vous avez ajoutés. Si vous vous dirigez vers la page d’un livre, vous devriez y voir seulement son titre et son contenu… aucun signe de la date de publication, image de couverture du livre ou auteur.
Création du template single-livre.php
Peu importe le thème que vous utilisez, il doit contenir un fichier single.php qui s’occupe de l’affichage :
- d’un article (seul, pas une liste d’archives) de votre blog
- d’un contenu non-identifié par WordPress, comme les contenus Livres que nous avons créé
Heureusement, single.php n’est pas l’unique template qui peut être utilisé par WordPress pour afficher un livre seul. Dupliquez ce fichier et renommez la copie en single-livre.php. Ce nouveau fichier, ou template, sera celui utilisé automatiquement par WordPress pour afficher les données de vos livres.
Récupérer les valeurs de nos nouveaux champs
La fonction get_post_meta est faite pour ça!
Pourquoi meta ? Le Codex WordPress français répond : WordPress a la particularité de permettre aux utilisateurs d’assigner des champs personnalisables à un article. Ces informations supplémentaires arbitraires sont aussi connues sous le nom de meta-données.
Cuztom génère les identifiants de vos champs de la manière suivante : _id_de_la_metabox_name_du_champ. Ainsi, notre date de publication est stockée avec l’identifiant _book_info_publication_date.
Enfin, notez qu’il est utile d’utiliser la fonction get_post_custom pour afficher les identifiants de vos posts meta et leurs valeurs associées.
Dans la prochaine vidéo, nous allons découvrir comment ajouter des colonnes dans les tableaux d’administration de nos nouveaux types de contenu, avec l’action manage_posts_custom_column. La suite très vite!
15 commentaires
Bonjour,
Super tuto, mais comment generer une page Auteur avec tous les livres écrits et leur descriptif
Merci.
Tu peux coupler un template archive-auteur.php et dire à WordPress d’y charger des types de contenus custom avec pre_get_posts, du style…
http://wordpress.stackexchange.com/questions/11210/including-post-type-wiki-in-author-archives
Par auteur
ok. merci de la rapidité de la réponse,
A moins que j’ai raté quelque chose, (ce qui est plus que probable) :
dans ce cas on n’utilise pas le custom post type AUTEUR créé, qui nous sert dans la METABOX à lier les LIVRES aux AUTEURS. Cela qui semble impliquer de renseigner et un post Auteur et un Page.
Je ne trouve pas le moyen, dans la page d’archive de commencer par l’article décrivant l’auteur, et de faire figurer ensuite les articles sur ses livres.
Ha pardon, tu souhaites afficher les livres d’un auteur sur la page d’un auteur unique ?
Donc le template à éditer serait plutôt single-auteur.php.
Et dedans, créer une boucle custom avec get_posts(‘post_type’ => ‘livre’, ‘meta_key’ => ‘_la_meta_key_de_lauteur’, ‘meta_value’ => $id_de_lauteur).
C’est très grossier comme exemple mais tu devrais y arriver avec ça, l’argument meta_key couplé à l’argument meta_value te permettra de filtrer tes livres selon la valeur d’un custom field spécifique (en l’occurrence ici, l’ID de notre auteur).
Par auteur
Bonjour, merci pour ces tuto très bien faits !
Je développe justement un site dans ce genre, et j’ai des informations « croisées » entre 2 types de contenus « visites » et « niveaux », je m’explique : lorsque je créé une nouvelle « visite » j’ai une metabox qui me permet de choisir un des terms de la taxonomie de « niveaux ». Jusque là tout va bien grâce à la fonction term_select. En revanche pour afficher le term qui a été sélectionné, c’est une galère… Ce n’est pas un Post comme les auteurs de ton exemple, donc j’imagine qu’il faut utiliser la fonction get_the_terms ?…
D’avance merci et encore bravo pour tes vidéos !
Bonjour Julien,
Tu veux afficher, sur la page single-visite.php (donc la vue d’une visite), les taxonomies « niveaux » que tu as définies dans la metabox, c’est ça ?
Auquel cas, ton get_post_meta() devrait te retourner une array d’ID(s) des terms de la taxonomie. Et ensuite, en effet, il faut utiliser get_term (http://codex.wordpress.org/Function_Reference/get_term)
Bon courage !
Par auteur
Super, merci beaucoup !
bonjour,
est ce possible de lier ces données inscrites dans les métaboxes et les insérer côté front dans un fichier single-$posttype.php ou un modèle de page wordpress.
merci d’avance
Bonjour,
La fonction get_post_meta est faite pour ça.
Par auteur
bonjour,
bizarrement je n’arrive pas à insérer les données des métaboxes dans les autres pages wordpress. je suis bien le tuto vidéo mais les fonctions get_post_meta fonctionne uniquement dans le fichier single.php. je n’arrive pas à comprendre pourquoi
merci pour votre réponse
Bonjour,
Oui, c’est tout à fait normal : le template single.php est chargé pour la page d’un post UNIQUE ; la boucle WordPress contient donc les informations de ce post en question (son ID notamment).
Donc get_post_meta($id, ‘…’) retournera une meta données du POST en question.
Mais si vous êtes sur une autre page, la boucle WordPress chargée est différente. Du coup, il faut aller récupérer le post en question qui vous intéresse : si le post est d’ID 14, utilisez get_post_meta(14, ‘…’).
Par auteur
merci pour votre réponse.
en fait le problème provenait d’une mauvaise syntaxe au niveau de mon custom post type. je m’explique :
j’ai crée un CPT savoir-faire. dans le register_post_type, en lieu et place de la variable $post_type, j’avais mis la valeur suivante ‘savoir-faire’. or d’après le codex il ne faut pas d’espace, de lettres capitales et pas plus de 20 caractères ($post_type
(string) (required) Post type. (max. 20 characters, cannot contain capital letters or spaces))
du coup lorsque que je liais ma page-savoirfaire.php avec mon custom post type, ben ça ne fonctionnait pas. d’ailleurs pour relier un custom post type avec une page ou autre single, voilà le php que j’utilise :
query(‘post_type=savoirfaires’);
while ($sf->have_posts()) : $sf->the_post();
?>
ce n’est peut être pas la solution la plus optimale, mais ça fonctionne bien. merci encore pour votre tuto et votre réactivité.
une dernière question, pensez vous que la source du fichier wp-cuztom-master est stable dans le temps?
encore merci
dewy
Oui j’utilise Cuztom sur des sites WP développés il y a plusieurs années et même avec le cœur mis à jour régulièrement, pas de problème.
Content que vous ayez résolu le problème !
Par auteur
[…] pas à découvrir nos tutoriels sur les types de contenu personnalisé et les champs custom meta de WordPress si vous ne comprenez pas bien l’intérêt de cette fonction […]
Merci 🙂