Le WordPress d'aujourd'hui, décodé pour les développeurs

SEO & GEO

Stocker un champ SEO dans le term meta d’une taxonomie, sans extension

Une page de taxonomie a besoin d'un titre et d'une description propres, distincts du nom de la catégorie. Tutoriel pour les stocker en term meta natif, sans extension SEO.

Par WordPress Développement • 9 mars 2022 • 4 min de lecture • Aucun commentaire
Stocker un champ SEO dans le term meta d'une taxonomie, sans extension

« Le nom de la catégorie sert de titre de page, mais ce n’est jamais le texte qu’on voudrait afficher dans les résultats de recherche. » C’est le constat de départ sur de nombreux sites WordPress dont les pages de taxonomie (catégories, étiquettes, taxonomies personnalisées) n’ont aucun champ dédié pour un titre SEO distinct du simple nom de la catégorie.

Ce tutoriel montre comment ajouter un champ de titre SEO personnalisé à l’écran d’édition d’une taxonomie, stocké en term meta natif, sans dépendre d’une extension SEO complète pour ce seul besoin.

Étape 1 : déclarer le champ avec register_term_meta

La fonction register_term_meta(), disponible depuis WordPress 4.6, déclare le champ auprès du cœur sans créer de table supplémentaire : les données sont stockées dans la table wp_termmeta déjà existante.

add_action( 'init', function() {
    register_term_meta( 'category', 'titre_seo', array(
        'type'              => 'string',
        'single'            => true,
        'sanitize_callback' => 'sanitize_text_field',
        'show_in_rest'      => true,
    ) );
} );

Étape 2 : ajouter le champ à l’écran d’édition

L'essentiel à retenir : register_term_meta déclare le champ sans table supplémentaire ; Les hooks _edit_form_fields et edited_ ajoutent le champ à l'écran d'administration ; term_description() seul ne suffit pas pour un vrai titre SEO distinct

Deux hooks distincts gèrent l’affichage du champ selon le contexte : la création d’un nouveau terme et l’édition d’un terme existant. Le premier utilise l’action {$taxonomy}_add_form_fields, le second {$taxonomy}_edit_form_fields :

add_action( 'category_edit_form_fields', function( $terme ) {
    $valeur = get_term_meta( $terme->term_id, 'titre_seo', true );
    ?>
    <tr class="form-field">
        <th scope="row"><label for="titre_seo">Titre SEO</label></th>
        <td>
            <input type="text" name="titre_seo" id="titre_seo" value="<?php echo esc_attr( $valeur ); ?>" size="60" />
        </td>
    </tr>
    <?php
} );

Étape 3 : enregistrer la valeur à la sauvegarde

L’action edited_{$taxonomy} se déclenche après l’enregistrement du formulaire d’édition, et permet d’y récupérer la valeur postée :

add_action( 'edited_category', function( $term_id ) {
    if ( isset( $_POST['titre_seo'] ) ) {
        update_term_meta( $term_id, 'titre_seo', sanitize_text_field( $_POST['titre_seo'] ) );
    }
} );

Étape 4 : afficher la valeur sur la page de taxonomie

Sur le gabarit category.php ou via un filtre document_title_parts, la valeur enregistrée remplace le nom brut de la catégorie quand elle est renseignée :

add_filter( 'document_title_parts', function( $parties ) {
    if ( is_category() ) {
        $terme = get_queried_object();
        $titre_seo = get_term_meta( $terme->term_id, 'titre_seo', true );
        if ( $titre_seo ) {
            $parties['title'] = $titre_seo;
        }
    }
    return $parties;
} );

Répéter l’opération pour une taxonomie personnalisée

Le même mécanisme s’applique tel quel à une taxonomie personnalisée, par exemple une taxonomie collection utilisée sur un site de vente d’articles d’artisanat. Il suffit de remplacer category par le nom réel de la taxonomie dans chacun des quatre hooks déclarés plus haut, sans modifier la structure du code :

register_term_meta( 'collection', 'titre_seo', array(
    'type'              => 'string',
    'single'            => true,
    'sanitize_callback' => 'sanitize_text_field',
    'show_in_rest'      => true,
) );

Cette portabilité vient du fait que register_term_meta(), les hooks de formulaire et l’action de sauvegarde fonctionnent tous de façon générique, indépendamment de la taxonomie concernée.

Pourquoi term_description() seul ne suffit pas

  • La fonction term_description() renvoie le texte de description de la taxonomie, pas un titre distinct
  • Un titre de page et une description destinée aux résultats de recherche répondent à des contraintes de longueur différentes
  • Séparer ces deux champs permet de garder une description éditoriale riche, sans la contraindre aux 60 caractères d’un titre affiché dans les résultats

Un repère utile pour ce genre de champ : le stocker en term meta natif garde les données portables, sans dépendre d’une extension qui pourrait un jour être désactivée.

En résumé

Ajouter un champ de titre SEO à une taxonomie ne demande que quatre hooks natifs de WordPress, sans recourir à une extension SEO complète pour ce seul besoin. Cette approche garde les données dans la table wp_termmeta standard, ce qui les rend facilement réutilisables ou migrables si le site évolue par la suite vers un outil de gestion SEO plus complet.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Partager :

À propos de l'auteur

WordPress Développement

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi