Depuis la version 2.9, WordPress a introduit la possibilité d'utiliser des types de publication personnalisés. Désormais, avec la version 3.0, les choses vont un peu plus loin avec la possibilité de créer des panneaux pour vos types de publication personnalisés. Dans ce tutoriel, nous vous montrerons comment implémenter les types de publication personnalisés sur votre site dans votre site WordPress.
Création de types de publication personnalisés – Utilisation de plugins
Depuis la version 3.0, WordPress ne dispose d'aucune interface utilisateur (UI) intégrée pour créer des types de publication personnalisés. Il n'y a que deux options que nous pouvons utiliser pour créer des types de publication personnalisés : les plugins ou les coder en dur dans le fichier functions.php de votre thème. Premièrement, examinons comment nous pouvons utiliser des plugins pour créer des types de publication personnalisés.
Interface utilisateur de type de publication personnalisé

Custom Post Type UI est un plugin développé par Brad Williams de WebDevStudios qui vous permet de créer facilement des types de publication personnalisés et des taxonomies. L'une des fonctionnalités les plus intéressantes de ce plugin est qu'il génère un code pour créer des types de publication personnalisés, que vous pouvez ensuite coller dans le fichier functions.php de votre thème. L'une des particularités de ce plugin est l'impossibilité de partager des taxonomies entre tous vos types de publication.

Depuis le panneau Interface utilisateur de type de publication personnalisé, cliquez sur « Ajouter un nouveau ».

Ensuite, vous avez quelques options à remplir. Le « Nom du type de publication » est ce que WordPress utilisera pour interroger tous les articles de ce type de publication. Le « Libellé » est ce qui sera affiché dans la barre latérale de votre tableau de bord, tout comme le menu « Articles » régulier. Si vous développez les « Afficher les options avancées », vous verrez quelques options supplémentaires que vous pouvez configurer. La plupart sont explicites, comme « Public » et « Afficher l'interface utilisateur ». Le premier, lorsqu'il est défini sur vrai, permet d'afficher le menu du type de publication personnalisé dans la barre latérale, et l'autre (afficher l'interface utilisateur), lorsqu'il est défini sur vrai, génère le panneau du menu.
« Réécriture » est ce qui permet au type de publication personnalisé d'utiliser les URL WordPress conviviales pour le référencement (Permaliens). Le « Slug de réécriture personnalisé » peut être défini comme vous le souhaitez. WordPress utilisera ce slug pour générer les permaliens. Donc, si nous avons example.com avec un slug de réécriture personnalisé « movies », le permalien de votre type de publication personnalisé ressemblerait à example.com/movies
La fonction « Variable de requête » de WordPress vous permet d'interroger les publications de votre type de publication personnalisé. Donc, si nous avons utilisé l'exemple donné précédemment, pour accéder à une publication avec le titre, Mon premier article de film, qui est écrit sous le type de publication Films, nous pouvons entrer example.com/?movies=my-first-movie-post. La variable de requête ressemble donc à ceci : ?nomdutypedepublication
Enfin, vous pouvez choisir les différentes fonctionnalités prises en charge par votre type de publication personnalisé, telles que les miniatures/images mises en avant et les extraits.

Création de types de publication personnalisés – Utilisation du fichier Functions.php

Si vous préférez utiliser des types de publication personnalisés sans plugin, ajoutez simplement le code suivant au fichier functions.php de votre thème :
// Creates Movies post type
register_post_type('movies', array(
'label' => 'Movies',
'public' => true,
'show_ui' => true,
'capability_type' => 'post',
'hierarchical' => false,
'rewrite' => array('slug' => 'movies'),
'query_var' => true,
'supports' => array(
'title',
'editor',
'excerpt',
'trackbacks',
'custom-fields',
'comments',
'revisions',
'thumbnail',
'author',
'page-attributes',)
) );
Décortiquons le code.
register_post_type( $post_type, $args ) : Cette fonction accepte deux paramètres, $post_type ou le nom du type de publication, et $args, un tableau d'arguments.
label : Nom pluriel donné au type de publication, affiché dans la barre latérale du panneau d'administration.
public : vrai/faux. Permet de peupler l'interface d'administration avec des publications de ce type.
show_ui : vrai/faux. Affiche ou masque une interface par défaut pour gérer ce type de publication.
capability_type : Par défaut : post Type de publication à utiliser pour vérifier les capacités de lecture, de modification et de suppression.
hierarchical : Si le type de publication est hiérarchique.
rewrite : vrai/faux. Par défaut : vrai Si l'argument slug est entré, le nom du slug est préfixé aux publications.
query_var : vrai/faux Définit le nom du type de publication comme variable de requête.
prend en charge : Par défaut : titre et auteur Définit différentes fonctionnalités de prise en charge que le type de publication autorise.
Visitez le Codex WordPress pour plus d'informations sur register_post_type().
Affichage des publications de type de publication personnalisé
Pour afficher les publications de votre type de publication personnalisé, ajoutez les codes suivants dans la boucle. Remplacez « name » par le nom de votre type de publication. Remarque : Vous n'avez pas à ajouter les types de publication personnalisés dans votre fichier index.php. Vous pouvez créer une page WordPress personnalisée et exécuter la requête suivante dans la boucle.
$query = new WP_Query( 'post_type=name' );
Pour afficher des publications de plusieurs types de publication, modifiez le code ci-dessus comme suit. Remplacez « movies » par le nom de votre type de publication personnalisé.
$query = new WP_Query( array( 'post_type' => array( 'post', 'movies' ) ) );
Le code ci-dessus affichera toutes les publications du type de publication régulier (post) et du type de publication personnalisé, movies.
C'est tout. Nous espérons que ce tutoriel vous a été utile et n'oubliez pas de poser vos questions dans les commentaires.

Gaby Izarra
Ok, j'ai un petit problème et vous pourriez peut-être m'aider... voici ma page de forum Wordpress. J'essaie d'adapter une liste d'événements d'un autre thème à celui que j'utilise.
http://wordpress.org/support/topic/php-query-for-custom-post-type-not-displaying-creating-theme-event-list?replies=1#post-5587886
dave
J'ai créé deux types de publication personnalisés mais seul le premier s'affiche sur ma page. J'ai ajouté ceci
$query = new WP_Query( array( ‘post_type’ => array( ‘post’, ‘featured’, ‘latest’ )
) );
dans mon fichier de boucle mais rien. comment puis-je résoudre cela ?
Jeroen
Savez-vous comment ajouter des types de publication personnalisés à la page d'archive du blog et au flux RSS ?
Support WPBeginner
Oui, nous avons des guides sur les deux sujets. Veuillez consulter comment créer une page d'archive de types de publication personnalisés dans WordPress, et comment ajouter des types de publication personnalisés à votre flux RSS principal WordPress.
Admin
wizdom networks
Tout d'abord, excellent article ! J'essaie d'implémenter des types de publication personnalisés par code. Il est à noter que la documentation actuelle de WordPress (http://codex.wordpress.org/Function_Reference/query_posts) spécifie que la fonction query_posts ne doit généralement pas être utilisée et que le hook pre_get_posts est utilisé pour modifier les requêtes.
« Il est fortement recommandé d'utiliser plutôt le filtre pre_get_posts, et de modifier la requête principale en vérifiant is_main_query »
Encore un excellent article, merci de l'avoir partagé.
Cordialement.
Support WPBeginner
Merci Wisdom, nous avons mis à jour l'article avec WP_Query
Admin
Thom Abbott
WOW... pour une novice qui utilise WP pour gérer son site web, ce n'est pas du tout du niveau débutant ! Je devrai probablement contacter un développeur WP pour configurer ma page personnalisée que je souhaite.
Personnel éditorial
Les types de publication personnalisés ont été créés pour que les développeurs étendent les fonctionnalités de WordPress. Ils n'ont jamais été destinés aux débutants.
Admin
mark shirley
query_posts( ‘post_type=movies’);
?>
Je n'arrive pas à faire fonctionner cela dans mon modèle de page enfant twentyeleven, où devrais-je le placer pour récupérer une page de films. En fait, ce sont les extraits que je veux vraiment. Merci Mark
muntzdesigns
Lorsque vous utilisez ce plugin et ajoutez le code ci-dessus à loop.php, vous perdrez le contrôle des catégories… mon type de publication personnalisé est ajouté à toutes les catégories… une aide ?
wpbeginner
@muntzdesigns C'est pourquoi vous avez plusieurs boucles… votre boucle de blog principale, archive.php, category.php etc… Sur un site au design personnalisé, vous devrez l'utiliser pour que cela fonctionne correctement.
muntzdesigns
@wpbeginner@muntzdesigns Donc, il suffit d'ajouter le code ci-dessus à tous les fichiers ? (loop.php, archive.php et category.php). Merci.
wpbeginner
@muntzdesigns Non. Vous n'ajoutez le code que sur les pages d'accueil. Le problème que vous aviez était que les types de publication personnalisés étaient ajoutés à toutes les catégories… Vous devez ajouter le code ci-dessus uniquement à la boucle principale. Créez ensuite une nouvelle boucle pour l'archive de catégorie, l'archive de taxonomie, l'archive d'auteur…
PriyaVerma
Bel article, merci beaucoup
dazuaga
Non, je me suis trompé.
dazuaga
Laissez tomber : %category%/%type%/%postname% Je pense que cela fera l'affaire
dazuaga
Que fait exactement l'identifiant de type de contenu dans le plugin CMS Press ? Je cherche un moyen de préfixer le slug de la catégorie au type de publication personnalisé (example.com/category/post_type/postname) mais en utilisant %category%/%identifier%/%postname% dans l'identifiant de type de contenu, cela se transforme automatiquement de cette façon : %categoryidentifierpostname
murphymakes
Excellentes informations comme d'habitude. Merci
whimba
I like Custom Post Type UI. It’s light and easy to use but is limited in functionality. So I created my own – http://wordpress.org/extend/plugins/mp-former/. You can try it
simplywendz
C'est un excellent tutoriel pour créer une publication personnalisée dans WordPress. Les étapes sont détaillées et faciles à suivre. C'est une aide énorme !
hoss9009
Je me posais la même question !!
Cupbearer
Wow, j'avais tout le système CMS Press qui fonctionnait, mais je n'arrivais pas à comprendre comment le faire apparaître dans les publications. Je suppose que cela existe depuis si longtemps que tout le monde suppose que cela devrait déjà être connu. Réponse parfaite pour que mon type de publication personnalisé apparaisse dans la boucle.
Jerry Craig
Échanson
Noel Boaz
Merci, cela m'a beaucoup aidé à afficher mon type de publication personnalisé sur la page d'accueil. J'ai définitivement mis en favoris, merci.
Ed
J'ai essayé le plugin, très impressionnant. Cependant, j'essaie d'afficher un attribut de page à partir des attributs 'Pages' de mon thème, c'est-à-dire la possibilité d'utiliser une option de page pleine largeur. Dois-je supposer que votre plugin ne récupère que les attributs des mises en page de type Post plutôt que des mises en page de type Page ? Tout ce que je veux, c'est avoir la possibilité de définir une publication avec un modèle prédéfini et complet.
Excellent travail cependant – je vais l'utiliser beaucoup.
Santé
Ed
Simon
J'ai essayé la méthode du plugin mais je n'ai pas réussi à afficher la publication. Peut-être est-ce parce que je n'ai pas trouvé le fichier loop.php.
Quoi qu'il en soit, merci beaucoup, je suis à peu près sûr que cela fonctionnera bientôt.
Je veux dire qu'une chose super géniale à faire avec WordPress serait d'avoir la possibilité de créer des vues de contenu personnalisées, tout comme dans Drupal avec le module Views.
Je sais qu'il existe un plugin appelé Pods et Pods CMS qui est censé rendre cela possible. Peut-être pourriez-vous demander au développeur de vous aider dans un article sur wpbeginner si vous ne comprenez pas du tout comme moi. Je suis sûr que beaucoup de gens aimeraient cela. Présenter des vues est ce qui fait vraiment d'un CMS un CMS vraiment dynamique après tout.
Personnel éditorial
Le loop.php pourrait ne pas exister dans votre thème. La boucle peut également se trouver dans votre index.php, archive.php, category.php, etc. Vous pouvez également créer une boucle personnalisée si vous le souhaitez.
Admin
Peter
Bon tutoriel, merci de partager.
J'ai une question à ce sujet.
J'ai créé un type de publication personnalisé via functions.php (un calendrier) qui possède une boîte de métadonnées personnalisée dans l'interface d'administration. Cette boîte de métadonnées utilise jQuery sur un champ.(http://jqueryui.com/demos/datepicker/).
Pour que ce sélecteur de date fonctionne, je dois intégrer les scripts requis.
add_action(‘admin_enqueue_scripts’,’enqueue_my_scripts’);
fonctionne mais mes scripts sont chargés sur toute l'interface d'administration. (ce qui interfère avec le jQuery par défaut de l'administration WP)
Donc, ce dont j'ai besoin, c'est du hook pour mon type de publication personnalisé.
ceci :
add_action(‘register_post_type’,’enqueue_my_scripts’);
ne fonctionne pas car register_post_type n'est pas un hook.
Alors, quel est le hook pour un custom post_type ?
Amanda
Vous pourriez essayer d'ajouter ce qui suit à votre définition de fonction avant d'enregistrer le script :
if(is_admin()) return;Donc quelque chose comme :
function some-function(){
// nous n'avons pas besoin de cela sur les pages d'administration, donc...
if(is_admin()) return;
// enregistrer le script personnalisé
wp_enqueue_script( 'some-script' );
}
Evan
Comment faire pour que chaque type de contenu apparaisse dans la boucle ? Je veux dire, c'est presque comme Tumblr. Si je publie une image... je dois personnaliser le code dans la boucle – de même si je publie un lien.
Personnel éditorial
Vous pouvez voir dans la publication, il y a une option pour afficher à la fois des types de publication personnalisés et des publications dans une seule boucle...
Admin
Michael
Je n'arrive pas à faire fonctionner la boucle pour interroger les publications de mon type personnalisé. Votre exemple semble assez simple, j'ai donc essayé ce qui suit : $var = query_posts( ‘post_type=sponsor’);
Ensuite, j'ai commencé une boucle
while ($var ->have_posts()) : $var ->the_post();
Faire des choses
endwhile;
cela renvoie une erreur php :
Fatal error: Call to a member function have_posts() on a non-object in single-sponsor.php on line 22
la ligne 22 est la ligne avec la boucle while.
Des idées ? Qu'est-ce que je fais de mal ?
Romero
J'ai essayé de créer une balise pour un champ personnalisé, et lorsque j'utilise get_the_tags dans la boucle d'un type personnalisé, rien ne s'affiche.
Avez-vous des suggestions ?
Jan
Je suis très enthousiasmé par cette nouvelle fonctionnalité ^-^ Vous avez fait une belle vidéo. Bien que dans votre exemple, pourquoi utiliser des types de publication personnalisés et ne pas simplement créer une catégorie de livres et de films pour les publications ? De cette façon, vous évitez tous les tracas d'un type de publication personnalisé.
Personnel éditorial
Premièrement, cela vous permet d'organiser les choses différemment. Deuxièmement, vous pouvez avoir un panneau d'écriture complètement différent avec des options différentes. Cela permet beaucoup plus de personnalisations...
Admin
Sandra
Merci pour cet excellent article ! Je suis un vrai débutant en wp, et peut-être pouvez-vous m'aider avec cette question :
Est-il possible d'afficher les archives d'un type de publication personnalisé dans la barre latérale comme on peut le faire en utilisant le plugin "display archives by cat" de kwebble ?
Personnel éditorial
Oui, il est possible d'afficher des types de publication personnalisés comme archives. Créez simplement une boucle personnalisée dans la barre latérale pour afficher des publications ou des catégories d'un type de publication spécifique.
Admin
lukeMV
Des guides faciles à comprendre sur la façon d'ajouter des options aux publications personnalisées ? Par exemple, si un film est dramatique, comique, d'horreur... pour avoir ces options sous forme de cases à cocher DANS le panneau d'édition de publication personnalisée ? Je n'arrive pas à trouver de guide ou de plugin pour cela.
Paul
Salut, C'était un excellent article. J'espérais que vous pourriez connaître la réponse à ma question.
Dans les dernières lignes, vous avez :
ceci renvoie toutes les publications et les types de publication nommés movies.
Savez-vous comment renvoyer à la fois les types de publication nommés 'movies' et les publications de la catégorie 'movies' mais exclure toutes les autres publications qui n'ont pas cette catégorie ??
Personnel éditorial
Vous utiliseriez les paramètres de catégorie pour query_posts – http://codex.wordpress.org/Function_Reference/query_posts
Admin
Walter
Pouvez-vous faire un pas en arrière : Pourquoi ai-je besoin de types de publication personnalisés en premier lieu ? Quel est le cas d'utilisation ?
Personnel éditorial
Les types de publication personnalisés sont utiles pour les utilisateurs qui utilisent WordPress pour plus qu'un simple blog, par exemple un CMS. Disons que vous voulez avoir un site qui contient votre portfolio et votre blog. Évidemment, vous ne voulez pas que vos blogs ressemblent à votre portfolio. C'est là que les types de publication personnalisés sont utiles. C'est une fonctionnalité très polyvalente pour faire passer WordPress au niveau supérieur. Pour l'utilisateur moyen de blog, il n'a probablement pas besoin de types de publication personnalisés.
Admin
Tracy B.
D'accord, mais j'essaie toujours de comprendre la différence entre cela et la simple catégorisation des choses. J'ai créé de nombreux sites pour des personnes où des pages séparées font, par exemple, la liste uniquement de la catégorie "événements actuels" et une autre de la catégorie "projets" ou autre. En quoi est-ce mieux ?
Personnel éditorial
C'est mieux en termes d'organisation. Vous pouvez avoir une taxonomie personnalisée, un panneau d'écriture, etc. pour un type de publication spécifique.
Chris
Je ne peux m'empêcher de penser que cela aurait été plus utile si vous aviez montré quelque chose d'extraordinaire avec les types de publication, plutôt que d'utiliser le vieux truc « films et livres ».
Que diriez-vous d'un sideblog utilisant les types de publication, ou quelque chose d'un peu plus pratique ? Tout cela ne fait que répéter ce que le Codex WP aura éventuellement, si ce n'est pas déjà là.
Personnel éditorial
Nous sommes désolés que vous ressentiez cela, Chris. Le Codex WP n'aura pas de vidéo qui vous montrera comment faire cela. Peu importe les noms que nous utilisons pour les types de publication personnalisés, l'idée est de savoir comment les ajouter. Nous ne créerons pas un site extraordinaire juste pour écrire un article sur les types de publication personnalisés. Si vous recherchez cette connaissance, vous feriez probablement mieux de le faire vous-même. Ce blog doit encore répondre aux besoins des utilisateurs débutants, c'est pourquoi nous avons partagé la méthode du plugin.
Admin
Kevin Elliott
Cela fonctionnera-t-il sur WordPress 2.9 ou est-ce seulement pour 3.0 ?
J'ai essayé d'utiliser 3.0, mais un problème étrange s'est produit où aucun de mes plugins ne s'activait, même ceux qui disaient s'activer. C'était très étrange !
-Kevin
Personnel éditorial
Cela fonctionnerait avec 3.0, donc utilisez-le uniquement sur 3.0. Essayez de réinstaller WordPress 3.0, nous gérons quelques sites dessus.
Admin
Marc
Je viens de regarder la vidéo...
Est-il vrai que nous devons modifier des fichiers php (= coder en dur) pour que tout fonctionne ?
Personnel éditorial
Non, vous devez faire l'un ou l'autre. Dans notre vidéo, nous avons montré les deux méthodes. Soit vous pouvez faire la méthode du code en dur, soit la méthode du plugin.
Admin
Marc
Allright, I see, thnx!
Alors je suppose que vous avez commencé par la méthode du code en dur ? À l'époque, en voyant uniquement tout le code, j'ai juste abandonné. Par conséquent, je n'ai pas vu la méthode du plugin, je suppose...
Rilwis
Très bon article. Le plugin Custom Post Type UI a des options très similaires au code PHP brut pour enregistrer les types de publication, ce qui est excellent pour les développeurs.
Merci d'avoir présenté de nombreux plugins utiles pour travailler avec les types de publication personnalisés.
Kaye Media
Excellent article, j'attends avec impatience Wp3 =)
Bryan
Je suis heureux que Wordpress ait intégré les types de publication personnalisés directement dans le framework wp. Cependant, je ne vois pas en quoi c'est mieux que d'utiliser des plugins déjà disponibles tels que Magic Fields ou Flutter. Avec ces plugins, vous obtenez le même effet, plus des champs personnalisés faciles à configurer avec de nombreux types différents et une flexibilité dans la manière de saisir et d'afficher vos données. Le wp 3.0 prend-il en charge quelque chose comme ça dès le départ ?
Personnel éditorial
Vous pouvez créer une interface utilisateur pour les champs personnalisés et à peu près tout le reste dans le backend avec les types de publication personnalisés. Vous avez raison, ces plugins rendent les choses très faciles pour les utilisateurs, mais si l'un de ces plugins cesse d'être développé, vous n'aurez plus le choix.
Admin
Bryan
C'est juste. J'ai un peu joué avec la bêta, mais pas autant que je le devrais, je suppose. Ce serait excitant si ça allait dans cette direction. Depuis que j'ai acquis de l'expérience avec ces plugins, je ne crée presque plus de site sans l'un d'eux.
Ce serait donc formidable si tous ces outils étaient disponibles et gérés au sein de l'application d'origine. Je peux voir que cela conduirait à une meilleure gestion du backend et encouragerait plus de personnes à y contribuer plutôt qu'à un petit groupe soutenant un plugin particulier.
Ian
Je pense qu'ils ont intentionnellement laissé une partie du code des types de publication personnalisés sous forme de code. Pour que l'utilisateur moyen ait à s'en occuper.
Abdul Wahid
C'est un article génial
ravalde
Je n'arrive pas à afficher de taxonomies dans twentyeleven, ni à trouver un tutoriel qui me montre comment faire du début à la fin, tous semblent se concentrer sur twentyten et la boucle.