24 décembre 2021
La création d’un type de post personnalisé peut parfois être nécessaire pour diverses raisons :
Pour les besoins de ce petit tuto, nous allons créer un type de post « Livre ». On lui associera une icône pour l’administration, on verra également qu’il sera possible de lui créer son propre emplacement dans le menu d’administration appelé Bibliothèque, puis on lui créera une taxonomie avec le lexique littéraire.
Pour créer votre propre type de post, rendez vous dans le fichier functions.php à la racine de votre thème et tapez-y le code suivant :
function add_post_types() {
$labels = array('name' => 'Bibliothèque',
'singular_name' => 'Livre',
'add_new' => 'Ajouter',
'add_new_item' => 'Ajouter un livre',
'edit_item' => 'Modifier',
'new_item' => 'Créer',
'view_item' => 'Voir',
'view_items' => 'Voir la bibliothèque',
'search_items' => 'Chercher dans la bibliothèque',
'not_found' => 'Livre non trouvé',
'not_found_in_trash' => 'Livre non trouvé dans la corbeille',
'all_items' => 'Liste de livres',
'archives' => 'Archives des livres',
'attributes' => 'Informations du livre',
'items_list' => 'Liste de livres'
);
register_post_type('book', ['label' => 'Livre',
'labels' => $labels,
'menu_icon' => 'dashicons-book',
'public' => true,
'show_ui' => true,
'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt')
]);
}
add_action('init', 'add_post_types');
Ce que l’on fait ici :
J’ai choisi ici de ne créer ce nouveau type de post qu’avec le paramétrage minimal pour en faciliter la compréhension. Il existe, en réalité, tout un tas de paramètres qui peuvent répondre à d’autres besoins lors de la création d’un nouveau type de post. Dans la documentation officielle, vous pouvez trouver la liste complète de ces paramètres.
Juste un petit exemple : vous pouvez demander à WordPress de ne pas créer un nouvel emplacement dans le menu d’administration pour votre type de post, mais de le placer plutôt en tant que sous-menu du menu « Pages ». Pour ça, il vous faudrait passer le paramètre : ‘show_in_menu‘ => ‘edit.php?post_type=page’. Il y a tout un tas de choses paramétrables, donc n’hésitez pas à jeter un oeil.
Maintenant que nous avons créé notre type de post, on peut avoir besoin d’une taxonomie spécifique pour lui. C’est ce que nous allons voir maintenant.
Tout d’abord, qu’est-ce que la taxonomie ? C’est un terme un poil barbare pour dire « les étiquettes (tags) et les catégories ». Dans WordPress, il existe deux manières de classifier le contenu :
C’est important à la fois :
Rendez-vous dans functions.php à la racine de votre thème et tapez le code suivant :
function add_post_types_tags_and_categories() {
$tags_labels = array('name' => 'Etiquettes de livre',
'singular_name' => 'Etiquette de livre',
'search_items' => 'Chercher dans les étiquettes de livre',
'popular_items' => 'Etiquettes de livre populaires',
'all_items' => 'Liste des étiquettes de livre',
'add_new_item' => 'Ajouter une étiquette de livre',
'not_found' => 'Aucune étiquette de livre trouvée.',
'items_list' => 'Etiquettes de livres'
);
register_taxonomy('book_tags', 'book', ['labels' => $tags_labels, 'show_ui' => true, 'hierarchical' => false]);
$categories_labels = array('name' => 'Genres littéraires',
'singular_name' => 'Genre littéraire',
'search_items' => 'Chercher dans les genres littéraires',
'popular_items' => 'Genres littéraires populaires',
'all_items' => 'Liste des genres littéraires',
'parent_item' => 'Genre littéraire parent',
'parent_item_colon' => 'Genre littéraire parent:',
'add_new_item' => 'Ajouter un genre littéraire',
'not_found' => 'Aucun genre littéraire trouvé.',
'items_list' => 'Genres littéraires'
);
register_taxonomy('book_categories', 'book', ['labels' => $categories_labels, 'show_ui' => true, 'hierarchical' => true]);
}
add_action('init', 'add_post_types_tags_and_categories');
Je ne vais pas m’attarder sur la description de chacune des lignes, je pense qu’elles parlent d’elles même.
Remarquez par contre que nous avons créé deux tableaux de ‘labels’, puis fait deux appels à la fonction register_taxonomy(). La différence entre les deux étant que nous avons d’abord créé une taxonomie non hiérarchique (hierarchical => false) puis une taxonomie hiérarchique. Ce qui correspond à ce que nous décrivions plus haut : les catégories et les étiquettes.
Il existe également tout un tas de paramétrage que vous pouvez trouver ici.
A noter que pour des besoins de clarté je n’ai pas ajouté les fonctions de traduction pour chacune des phrases, mais que c’est tout à fait possible en utilisant les fonctions __() et _x().
Ca donnerait par exemple : ‘name’ => _x(‘Genres littéraires’, ‘taxonomy book name’)
Ci-dessus, je viens de créer un livre. Vous pouvez voir dans le menu à gauche, que j’ai bien ma section « Bibliothèque » contenant à la fois le listing des livres, la capacité à en ajouter de nouveaux mais également la possibilité de gérer les étiquettes et les genres littéraires que je veux.
Vous constaterez que, dans la colonne de droite, j’ai associé une étiquette et une catégorie à mon livre. Les catégories apparaissent automatiquement quand elles sont créées, par contres les étiquettes ne fonctionnent pas de la même manière. Si vous voulez voir apparaitre une étiquette que vous avez créé au préalable, vous allez devoir commencer à taper son nom dans le champ et vous pourrez ensuite la sélectionner.
Il ne reste plus maintenant qu’à créer un template spécifique pour ce type de post.
Pour récupérer ces posts, il suffira maintenant d’utiliser la fonction get_pages();
$booksList = get_pages(array('post_type' => 'book'));
Attention toutefois, pour pouvoir récupérer ces types de page, il vous faudra passer la variable hierarchical de register_post_type() à true.
register_post_type('book', ['label' => 'Livre',
'labels' => $labels,
'menu_icon' => 'dashicons-book',
'public' => true,
'show_ui' => true,
'hierarchical' => true
Il existe plusieurs manières de créer un template pour un type de post spécifique que nous avons déjà couvert ici.
Mais il existe une dernière méthode qui n’avait pas été abordée.
Créer un fichier single-<NOM_DU_TYPE_DE_POST>.php à la racine de votre thème. Ici, ce sera single-book.php.
Et voilà, normalement, ça marche immédiatement. Si ce n’est pas le cas, rendez-vous dans Réglages > Permaliens et regénérez les permaliens.
Maintenant que vous avez votre nouveau type de post, vous aimeriez sans doute avoir des champs spécifiques (dans le cas d’un livre : nombre de pages, éditeur, galerie, etc.) qui seront exploités via votre template. Eh bien ce sera l’objet du prochain article !
Copyright image : seekpng