Skip to content

Tout pour WordPress, le développement web — et plus encore

🔖 Comment activer les tags sur les pages WordPress

🔖 Comment activer les tags sur les pages WordPress

WordPress ne prend pas en charge les étiquettes pour les pages par défaut, et c’est agaçant jusqu’à ce que vous compreniez pourquoi cela a été conçu ainsi. Une page dans WordPress est techniquement un type de publication personnalisé auquel la taxonomie post_tag n’est tout simplement pas rattachée. Les développeurs du cœur ont réservé les étiquettes aux articles, en considérant les pages comme du contenu statique.

Mais en pratique, cette limitation peut être contournée en cinq minutes. Deux méthodes: une ligne de code dans functions.php ou un micro-plugin que vous pouvez activer et désactiver sans modifier votre thème. Voici les deux options, accompagnées d’une explication de ce qui se passe précisément sous le capot.

💡 Aperçu rapide:

  • Enregistrez la taxonomie post_tag pour le type de publication page à l’aide de la seule fonction register_taxonomy_for_object_type

  • Ajoutez la prise en charge des étiquettes dans les archives via le hook pre_get_posts afin que les pages apparaissent dans les résultats des requêtes par étiquette

  • Le code fonctionne pour n’importe quel type de publication personnalisé; il suffit de répéter l’appel avec le nom du type souhaité

  • Le tout s’encapsule dans un plugin séparé en une minute: fichier → en-tête du plugin → code → activation

Pourquoi des étiquettes sur les pages

Les étiquettes ne se résument pas à un nuage dans la barre latérale. Elles constituent un axe de navigation qui relie des pages éparpillées en groupes thématiques, plus rapidement qu’avec des catégories ou des menus.

Les pages WordPress se multiplient souvent: contacts, mentions légales, conditions générales, pages d’atterrissage de services, portfolios, documentation. Sans étiquettes, le lien entre elles repose uniquement sur des liens manuels dans le texte. Avec les étiquettes, une simple page «Livraison» se retrouve automatiquement dans le groupe «logistique» aux côtés de la page «Retours», et les visiteurs cliquent sur l’étiquette pour voir tout ce qui s’y rapporte.

Pour le SEO, les étiquettes sur les pages apportent des liens internes supplémentaires et réduisent le taux de rebond: les utilisateurs ne quittent pas le site après la première page, mais plongent dans une collection thématique. De plus, les étiquettes sont intégrées au plan du site, ce qui aide les moteurs de recherche à mieux comprendre la structure.

Méthode 1: du code dans functions.php

La voie la plus directe consiste à ajouter un extrait au fichier functions.php de votre thème actif. Ouvrez wp-content/themes/VOTRE_THEME/functions.php et collez le code avant la balise fermante ?> ou tout à la fin du fichier:

1/**
2 * Add tag support to WordPress pages.
3 * Code — in functions.php of child theme or via Code Snippets plugin.
4 */
5function sdstudio_add_tags_to_pages() {
6 register_taxonomy_for_object_type( 'post_tag', 'page' );
7}
8add_action( 'init', 'sdstudio_add_tags_to_pages' );
9
10/**
11 * Include pages in tag archive queries.
12 * Without this, pages won't appear on /tag/tag-name/
13 */
14function sdstudio_pages_in_tag_archives( $wp_query ) {
15 if ( $wp_query->get( 'tag' ) ) {
16 $wp_query->set( 'post_type', 'any' );
17 }
18}
19add_action( 'pre_get_posts', 'sdstudio_pages_in_tag_archives' );

Voici ce qui se passe. La fonction register_taxonomy_for_object_type() relie la taxonomie existante post_tag au type de publication page. Il s’agit d’une fonction du cœur de WordPress; documentation sur developer.wordpress.org. Elle ne crée pas une nouvelle taxonomie, mais ajoute seulement la relation «pages → étiquettes».

Le hook pre_get_posts modifie la requête SQL avant son exécution. Lorsque WordPress construit une page d’archive d’étiquette (/tag/name/), il recherche par défaut uniquement les publications de type post. La ligne $wp_query->set( 'post_type', 'any' ) élargit la sélection à tous les types: pages, articles, types personnalisés.

Après avoir inséré le code, allez sur n’importe quelle page et un bloc «Étiquettes» apparaîtra dans la barre latérale, exactement comme pour les articles classiques. Cela fonctionne immédiatement; pas besoin de vider le cache.

Adaptation pour les types de publication personnalisés

Si vous avez des types de publication personnalisés (CPT) tels que des portfolios, des témoignages ou des produits qui ont également besoin d’étiquettes, ajoutez le même nombre d’appels à register_taxonomy_for_object_type() à l’intérieur de votre fonction init:

1register_taxonomy_for_object_type( 'post_tag', 'portfolio' );
2register_taxonomy_for_object_type( 'post_tag', 'testimonials' );

Le nom du CPT est le deuxième argument, celui-là même qui a été spécifié lors de l’enregistrement du type via register_post_type(). Aucune modification supplémentaire de pre_get_posts n’est nécessaire: 'any' inclut déjà tous les types enregistrés.

Méthode 2: un plugin séparé

Modifier directement functions.php est une solution qui fonctionne, mais elle est fragile. Changez de thème et le code disparaît, emportant avec lui les étiquettes des pages. Pour ceux qui gèrent plusieurs sites ou changent fréquemment de thème, il est plus fiable de déplacer l’extrait dans un plugin séparé.

Créez le fichier wp-content/plugins/sdstudio-tags-for-pages.php avec ce contenu:

1<?php
2/**
3 * Plugin Name: Tags for Pages
4 * Description: Enables post tags on WordPress pages and custom post types
5 * Version: 1.0
6 * Author: SDStudio
7 * License: GPL-2.0+
8 */
9
10// Direct access — forbidden
11if ( ! defined( 'ABSPATH' ) ) {
12 exit;
13}
14
15// Tags → pages
16function sdstudio_tags_for_pages() {
17 register_taxonomy_for_object_type( 'post_tag', 'page' );
18}
19add_action( 'init', 'sdstudio_tags_for_pages' );
20
21// Pages → tag archive
22function sdstudio_pages_in_tag_queries( $wp_query ) {
23 if ( ! is_admin() && $wp_query->is_main_query() && $wp_query->get( 'tag' ) ) {
24 $wp_query->set( 'post_type', 'any' );
25 }
26}
27add_action( 'pre_get_posts', 'sdstudio_pages_in_tag_queries' );

La différence par rapport à la première méthode réside dans la vérification ! is_admin() && $wp_query->is_main_query(). Elle garantit que les requêtes de l’administration ne sont pas affectées: pre_get_posts se déclenche partout, y compris dans la liste des pages du tableau de bord, et sans cette vérification, vous pourriez obtenir un comportement inattendu dans l’admin lors du filtrage.

Le fichier est prêt; allez dans Extensions, trouvez «Tags for Pages» et activez-le. C’est tout. Lorsque vous changez de thème, le plugin reste actif et les étiquettes ne disparaissent pas. Sur un multisite, le plugin peut être activé par site ou pour l’ensemble du réseau.

Méthode 3: des plugins prêts à l’emploi depuis le répertoire

Si vous ne souhaitez pas écrire de code, des solutions prêtes à l’emploi disponibles sur WordPress.org remplissent cette tâche. Elles ajoutent non seulement des étiquettes, mais aussi des catégories pour les pages, ainsi qu’une interface de gestion.

Add Categories to Pages est un plugin léger qui active à la fois les catégories et les étiquettes pour les pages d’une simple case à cocher. Pas de réglages, pas de publicité. Il convient lorsque vous voulez simplement que cela fonctionne sans écrans supplémentaires.

Voici une démonstration vidéo de l’ajout d’étiquettes aux pages via du code et via un plugin, 4 minutes, toutes les étapes montrées en temps réel:

Point clé: les plugins tiers apportent du code et des hooks supplémentaires. Si votre site est déjà chargé d’une douzaine de plugins, un de plus représente un point de défaillance supplémentaire. Le code des méthodes 1 et 2 ne pèse que quelques octets et n’ajoute pas de requêtes de base de données au-delà des requêtes standard.

⁉️🤔 Foire aux questions

Cela fonctionne-t-il sur un multisite? Oui, le code est universel. Vous pouvez activer le plugin par site ou l’activer à l’échelle du réseau via «Activer pour le réseau».

Sur un multisite WordPress, le code fonctionne de manière identique sur tous les sites du réseau. La fonction register_taxonomy_for_object_type() est liée à la taxonomie post_tag, qui existe séparément sur chaque site du réseau, de sorte que les étiquettes ne se chevauchent pas entre les sites. Pour chaque site enfant, les étiquettes sur les pages sont activées indépendamment: activez le plugin sur un site et les étiquettes n’apparaissent que sur celui-ci.

Dois-je mettre à jour les liens permanents après avoir inséré le code? Non, la structure des URL ne change pas. Les étiquettes sur les pages n’ajoutent pas de nouvelles règles de réécriture.

WordPress stocke la relation «page, étiquette» dans la table wp_term_relationships, la même que celle utilisée pour les articles. Aucune règle de réécriture n’est affectée: l’archive des étiquettes existe déjà (/tag/name/), et pre_get_posts inclut simplement les pages dans sa requête. Il n’est pas nécessaire de toucher aux liens permanents; tout fonctionne immédiatement après l’activation du code.

Les étiquettes disparaîtront-elles lors d’un changement de thème? Cela dépend de la méthode. Le code dans le functions.php du thème les fera disparaître. Le code dans un plugin ou dans Code Snippets les conservera.

Lors d’un changement de thème, WordPress charge un nouveau functions.php, donc l’extrait de l’ancien thème cesse de s’exécuter et la metabox des étiquettes sur les pages disparaît. Les relations «page, étiquette» dans la base de données ne sont toutefois pas supprimées. Il suffit de restaurer le code (dans le nouveau thème ou via un plugin) et toutes les étiquettes précédemment attribuées réapparaîtront dans l’administration.

Puis-je attribuer des étiquettes par programmation lors de l’importation de pages? Oui, via wp_set_object_terms( $page_id, array( 'tag1', 'tag2' ), 'post_tag' ).

La fonction wp_set_object_terms() accepte un ID de page, un tableau de noms d’étiquettes et le nom de la taxonomie. Si une étiquette portant ce nom n’existe pas, WordPress la créera automatiquement. C’est pratique lors d’une migration: un script parcourt toutes les pages et attribue les étiquettes à partir d’un fichier CSV ou d’un ancien CMS. Il est important d’exécuter le script après init, sinon la taxonomie n’est pas encore enregistrée.

Qu’en est-il du nuage d’étiquettes: les pages y apparaîtront-elles? Oui, le widget standard «Nuage d’étiquettes» récupérera les étiquettes des pages sans configuration supplémentaire.

Le widget wp_tag_cloud() collecte par défaut tous les objets de la taxonomie post_tag, quel que soit le type de publication. Dès qu’une page possède au moins une étiquette, elle entre dans le nuage sur un pied d’égalité avec les étiquettes des articles. La fréquence est également calculée correctement: une étiquette sur trois pages et deux articles donne un poids de «5» et s’affiche en plus grand.

Que choisir: du code ou un plugin

Le choix concret dépend de votre scénario, pas d’une «bonne réponse».

Les propriétaires d’un seul site qui ne changent pas de thème pendant des années se contenteront d’un extrait dans functions.php: copier, coller, terminé. Les freelances gérant une dizaine de sites clients trouveront un plugin plus pratique: envoyez le fichier zip au client ou activez-le sur un nouveau projet en quelques secondes. Ceux qui utilisent déjà Code Snippets ou WPCodeBox peuvent simplement ajouter l’extrait à leur collection; il ne sera pas perdu lors des mises à jour du thème et ne nécessite pas de plugin séparé.

Si vous avez besoin de plus que des étiquettes (catégories, taxonomies personnalisées, filtrage avancé), tournez-vous vers les plugins prêts à l’emploi de WordPress.org. Mais pour la tâche «activer les étiquettes sur les pages», sept lignes de code suffisent. Tout le reste est superflu.

Ensuite, mettez en place votre structure d’étiquettes: réfléchissez à 5 à 7 thèmes clés pour vos pages et attribuez-les. Dans un mois, le nuage d’étiquettes montrera quels thèmes du site sont les plus fortement reliés.