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

SEO & GEO

Le filtre wp_sitemaps_posts_query_args pour exclure un type de contenu

Exclure un type de publication personnalisé du sitemap natif de WordPress sans désactiver ni réécrire tout le générateur, grâce à un filtre core dédié.

Par WordPress Développement • 20 janvier 2023 • 4 min de lecture • Aucun commentaire
Le filtre wp_sitemaps_posts_query_args pour exclure un type de contenu

Le générateur de sitemap intégré à WordPress depuis la version 5.5 inclut automatiquement tous les types de publication déclarés comme public et disposant de show_ui activé, sans distinction entre ceux réellement destinés à l’indexation et ceux qui n’ont vocation qu’à un usage interne. Un type de publication personnalisé temoignage, créé pour afficher des avis clients en boucle sur la page d’accueil mais sans page de destination propre ni contenu réellement autonome, se retrouve ainsi listé dans le sitemap au même titre qu’un article de blog.

Plutôt que de désactiver entièrement le sitemap natif — ce qui priverait le site de sa génération automatique pour tous les autres types de contenu — ou d’installer une extension dédiée pour un besoin aussi ciblé, WordPress expose un filtre spécifique conçu précisément pour ce cas d’usage : wp_sitemaps_posts_query_args.

Ce que fait ce filtre précisément

Ce filtre intervient au moment où le générateur de sitemap construit les arguments de la WP_Query utilisée pour récupérer les publications à lister pour un type de contenu donné. Il reçoit en paramètres le tableau d’arguments de requête et le nom du type de publication concerné, et doit retourner un tableau d’arguments, modifié ou non.

Contrairement à un filtre qui agirait sur le résultat déjà construit du sitemap, celui-ci agit en amont, directement sur la requête à la base de données, ce qui évite de charger inutilement des publications pour ensuite les retirer après coup.

Exclure un type de contenu entier

L'essentiel à retenir : Le sitemap natif inclut par défaut tous les types de contenu publics ; wp_sitemaps_posts_query_args modifie les arguments de la requête, pas son résultat ; La solution tient en quelques lignes, sans plugin supplémentaire

Pour retirer complètement un type de publication du sitemap, la méthode la plus directe consiste à agir non pas sur ce filtre mais sur le filtre wp_sitemaps_post_types, qui contrôle la liste même des types inclus. Le filtre wp_sitemaps_posts_query_args devient utile pour un cas plus fin : conserver le type de contenu dans le sitemap, mais en exclure certaines entrées selon un critère métier, par exemple un statut de méta-donnée personnalisé.

Exemple : exclure les témoignages archivés

add_filter( 'wp_sitemaps_posts_query_args', function( $args, $post_type ) {
    if ( 'temoignage' === $post_type ) {
        $args['meta_query'] = array(
            array(
                'key'     => 'temoignage_archive',
                'compare' => 'NOT EXISTS',
            ),
        );
    }
    return $args;
}, 10, 2 );

Cette version conserve dans le sitemap uniquement les témoignages ne portant pas la méta-donnée temoignage_archive, sans toucher au reste du type de contenu ni désactiver la génération automatique pour les autres publications du site.

Exclure entièrement un type via le filtre complémentaire

Quand l’objectif est bien de retirer tout le type de publication, indépendamment de tout critère, le filtre adapté reste wp_sitemaps_post_types :

add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
    unset( $post_types['temoignage'] );
    return $post_types;
} );

Vérifier le résultat

Après ajout de l’un ou l’autre filtre, consulter directement /wp-sitemap.xml permet de confirmer la disparition du sitemap dédié au type de contenu ou la réduction du nombre d’entrées listées, sans attendre un nouveau passage du robot d’exploration pour s’en assurer.

  • Vider tout cache de page éventuel avant de vérifier, pour éviter de consulter une version obsolète du sitemap.
  • Contrôler également /wp-sitemap-posts-temoignage-1.xml, qui doit disparaître ou se réduire selon le filtre choisi.

Un filtre ciblé sur les arguments de requête reste toujours préférable à une extension supplémentaire, quand le cœur de WordPress propose déjà exactement le point d’entrée nécessaire.

En résumé

Le sitemap natif de WordPress, souvent perçu comme rigide, expose en réalité une série de filtres suffisamment fins pour couvrir la plupart des besoins d’exclusion, sans plugin tiers ni réécriture du générateur. wp_sitemaps_posts_query_args et wp_sitemaps_post_types répondent à deux besoins distincts, l’un pour affiner une requête, l’autre pour retirer un type entier, et se combinent sans conflit selon le cas rencontré.

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