Le CMS WordPress propose nativement dans sa gestion de contenu des Articles (contenus classés temporellement par date de publication) et des Pages.
Ces deux entités sont relativement semblables, mais par défaut les Pages manquent de fonctionnalités pourtant proposées avec les Articles :
- les Catégories
- les Étiquettes (ou tags)
Ces deux méthodes de classement sont des taxonomies : les catégories sont hiérarchiques tandis que les étiquettes sont facultatives et ne sont pas hiérarchiques.
Durant le développement de votre projet, vous souhaiterez peut être aussi associer ces catégories et étiquettes aux Pages pour profiter de leur classification et de toutes les fonctions natives bien pratiques en découlant, comme par exemple lister toutes les pages d'une catégorie, ou toutes les pages reliées à une étiquette.
La solution
L'extrait de code proposé peut être inséré dans le fichier functions.php
du thème.
WordPress prévoit déjà une méthode register_taxonomy_for_object_type pour ajouter une taxonomie existante (cela tombe bien, c'est le cas ici, les catégories et étiquettes existent déjà) à un type d'objet (à savoir les Pages). Le premier paramètre sera la taxonomie, category
pour les catégories natives et post_tag
pour les étiquettes natives. Le deuxième paramètre l'objet concerné : page
, on devine assez aisément pourquoi.
Nous lançons cette action dès l'initialisation init
du CMS et ajoutons une action complémentaire sur l'événement pre_get_posts
(sauf dans l'interface d'administration) qui se déclenche lorsqu'on prépare une requête mais avant de la lancer. Elle permettra de modifier le fonctionnement initial du CMS pour compléter les boucles et afficher des listes de Pages basées sur les catégories, afin de rendre ce comportement plus proche de celui que l'on a sur les Articles. Ce complément n'est apporté que sur les requêtes des templates d'archive et de tag d'où les tests de l'existence des paramètres get .
<?php
/**
* Taxonomies (catégories et tags) également associées aux Pages
*/
function register_taxonomies_to_pages() {
register_taxonomy_for_object_type('category', 'page');
register_taxonomy_for_object_type('post_tag', 'page');
}
add_action('init', 'register_taxonomies_to_pages');
function category_and_tag_archives($wp_query) {
if ($wp_query->get('category_name') || $wp_query->get('cat') || $wp_query->get('tag'))
$wp_query->set('post_type', array('post','page'));
}
if (!is_admin()) {
add_action('pre_get_posts', 'category_and_tag_archives');
}
Conséquence, nous pouvons désormais gérer ces taxonomies dans les Pages :
Bon développement !
Commentaires
Bonjour,
Cela ne fonctionne pas, les catégories ne s'affiche pas.