Les catégories sous WordPress sont actives pour vos articles mais comme n’importe quelle taxonomie vous pouvez en disposer pour d’autres types de contenus comme les pages.
Cette technique permet de croiser l’information : une même catégorie peut classer à la fois des articles et des pages, puis les lister ensemble dans son archive. Elle ne modifie pas l’adresse des pages pour autant : même avec une structure de permaliens qui contient %category%, une page garde son adresse habituelle.
Commencez par créer un mu-plugin puis collez ces lignes de code à l’intérieur :
Une fois le fichier déposé dans votre répertoire /wp-content/mu-plugins/, retournez dans votre back-office WordPress : le sous-menu Pages > Catégories apparaît, ainsi qu’une colonne Catégories dans la liste des pages.
Le fonctionnement habituel opère, il suffit d’éditer une page pour lui assigner une catégorie : dans l’éditeur de blocs, le panneau Catégories s’affiche dans l’onglet Page de la colonne latérale. Aucun réglage supplémentaire n’est nécessaire, car la taxonomie category est déjà déclarée avec show_in_rest à true, la condition pour qu’une taxonomie apparaisse dans l’éditeur de blocs.
Vous pouvez étendre cela à d’autres types de contenus personnalisés en répétant la ligne 3 avec l’identifiant de chaque type : la fonction register_taxonomy_for_object_type() n’accepte qu’un type à la fois et, si vous lui passez un tableau, elle renvoie false sans rien faire ni afficher d’erreur. Pour un type de contenu déclaré par une extension, accrochez plutôt votre fonction au crochet init avec une priorité de 20, comme je l’explique dans le tutoriel pour utiliser les catégories et les étiquettes avec vos Custom Post Types.
Afficher vos pages dans les archives de catégories
Classer une page dans une catégorie ne suffit pas à l’afficher sur le site : l’archive d’une catégorie ne liste que les articles, même quand des pages y sont rattachées. Ajoutez les pages à la requête principale de ces archives avec le crochet pre_get_posts, dans le même mu-plugin :
Le test is_main_query() limite la modification à la requête principale de la page : les autres listes de contenus ne sont pas touchées, pas plus que l’administration grâce à is_admin(). Avec un thème à blocs, le bloc Boucle de requête du modèle d’archive reprend cette requête principale tant que son réglage Type de requête est sur Par défaut.
Pour rapprocher encore les pages des articles, vous pouvez ajouter un champ extrait aux pages.
10 réponses
Bonjour,
Merci pour ce code (et tout le reste d’ailleurs !)
Lors de la derniere MAJ de WP et du theme ASTRA ce code génère une erreur « l’éditeur a rencontré une erreur inattendue »
Le code était inséré dans un child theme et fonctionnait parfaitement avant.
Cette erreur apparait aussi pour des plugins qui proposent la même fonction, par exemple le plugin « Post Tags and Categories for Pages »
Une idée sur la façon de rendre ce code compatible ?
Merci !
Rebonjour,
Apres investigation il apparait que cette ligne de code rentre en conflit avec les pages sur lesquelles figurent un formulaire de contact CF7.
A suivre…
Bonjour et merci pour ce tuto Formidable. S’lement moi j’ne dispose pas encore d’un pass premium pour installer des plugins. Y’aurait il une solution pour moi?
Il n’y a pas de pass premium sur un site WordPress sauf si vous faites référence à wordpress.com.
Excellent, merci
Bonjour
En ayant ce snippet d’activé et sachant que mes permaliens sont réglés sur /%category%/%postname% comment se fait il que quand je crée une page et lui attribue une catégorie, cette catégorie n’est pas automatiquement incluse dans l’URL ?
Merci
Bonjour Pascal, le tutoriel montre comment ajouter le support des catégories pour les pages mais cela ne suffit pas pour modifier la gestion des permaliens sur les pages. C’est plus complexe et je ne l’ai pas traité ici. Une extension comme Permalinks Customizer pourrait faire l’affaire.
Merci, ça marche parfaitement.
Merci Aurélien, c’est super!
J’ai une question:
Pour configurer et afficher la catégorie d’un post on créé une page : « category.php »
Pour un post type qui serait « produit » on créé la page: « taxonomy-categorie_produit.php »
Et pour les catégorie de pages comment faut-il appeler la page d’appel?
Est-ce « taxonomy-categorie_page.php » ?
Merci d’avance
🙂
C’est inexact, on génère un fichier sous la forme taxonomy_nom_taxonomie.php et non avec le nom du type de contenu. Ensuite, il faut avoir recours à une fonction via
pre_get_postspour injecter des types de contenus additionnels dans category.php si nécessaire. En effet, par défaut cela ne reprendra que les articles.