Comment exclure des pages ou articles des résultats de la recherche WordPress ?

Résultats de la recherche WordPress sans filtre, avec les pages de paiement en premier
Dans le cadre de la réalisation d’un site web WordPress pour un client, j’ai dû intervenir sur le moteur de recherche de WordPress, plus précisément sur l’affichage des résultats. Le problème rencontré : ce site possédait plusieurs pages de retour suite à un paiement par carte bancaire (confirmation, échec, annulation…). Ces pages s’affichaient dans les résultats de la recherche alors que le client ne souhaitait pas les y voir figurer, car elles n’apportent aucune information utile aux visiteurs. Je vous explique donc comment exclure des pages ou articles des résultats du moteur de recherche de votre thème WordPress.

L’essentiel à retenir ℹ️

Pour exclure des pages ou articles des résultats de la recherche WordPress, deux approches existent : un snippet PHP utilisant le filtre pre_get_posts dans le fichier functions.php de votre thème, ou une extension dédiée comme Exclude Pages from Search. La méthode par code est préférable sur le plan des performances. Il vous suffit de renseigner les identifiants des pages à masquer dans un tableau PHP. Résultat immédiat, sans plugin supplémentaire.

Affichage de pages indésirables dans les résultats du moteur de recherche de WordPress

Il peut arriver de vouloir ne pas afficher certaines pages ou articles des résultats du moteur de recherche de WordPress comme le souhaitait mon client. Voilà ce que donnait l’affichage de la requête « paiement » sur son site :
LIRE AUSSI  Comment supprimer "Fièrement propulsé par WordPress" du pied de page
Affichage sans filtre des résultats de la recherche WordPress
Affichage sans filtre des résultats de la recherche WordPress
Comme vous pouvez le voir, ce sont justement les pages de retour de paiement par CB qui sont affichées en premier alors que mon client ne voudrait pas les voir dans ces résultats. Notamment parce qu’il a des pages informatives bien plus pertinentes sur le paiement sur le site et que ces pages n’importent aucune information tangible. Remarque : il est bien sûr possible de personnaliser l’affichage des résultats du moteur de recherche de WordPress (j’aborderai ce sujet dans un prochain article). Par défaut, WordPress affiche un extrait de la page concernée mais il est possible de mieux contrôler ce qui est affiché dans les résultats de la recherche en utilisant le champ « Extrait » de WordPress. Ce champ est uniquement disponible pour les articles, à la  base, mais il est tout à fait possible de rajouter le champ extrait pour les pages WordPress grâce à un snippet.

Filtrer les résultats de la recherche WordPress grâce à un snippet

Avec WordPress, vous pouvez personnaliser le comportement du moteur de recherche en utilisant un petit bout de code, ce que l’on appelle un snippet WordPress (utile par exemple pour désactiver Gutenberg ou supprimer « Fièrement propulsé par WordPress » de votre thème). Le code ci-dessous est à copier dans le fichier functions.php de votre thème WordPress. Si vous avez suivi mes recommandations sur la mise en place d’un thème enfant WordPress, vos modifications ne seront pas écrasées lors des mises à jour du thème parent.
LIRE AUSSI  Création de sites wordpress : pourquoi faire appel à un professionnel ?
Voici le code à copier dans le fichier functions.php de votre thème WP :
// filtrer la recherche WP
function ma_recherche_filter( $query )
{
	$pagesAExclure = array( 2732, 2746, 2738, 2751, 2747 ); //id page/post à exclure (séparés par une virgule)
    if ( $query->is_search )
    {
        $query->set( 'post__not_in', $pagesAExclure );
    }
    return $query;
}
add_filter('pre_get_posts','ma_recherche_filter');
Ce code utilise le filtre WordPress pre_get_posts, qui intervient avant l’exécution de la requête SQL. On définit un tableau nommé ici pagesAExclure qui contient les identifiants des pages ou articles à masquer des résultats de la recherche. Pour trouver l’identifiant d’une page ou d’un article WordPress, ouvrez-la en mode édition dans l’administration : l’ID apparaît dans l’URL de la barre d’adresse (paramètre post=XXXX). Il vous suffit ensuite de saisir ces identifiants entre les parenthèses :
$pagesAExclure = array( 2732, 2746, 2738, 2751, 2747 )
Mettez à jour votre fichier functions.php sur l’hébergement de votre site web. Si vous préférez insérer du code PHP sans modifier le fichier functions.php, c’est également possible. Retournez ensuite à votre recherche : les pages ou articles renseignés dans le code ont disparu des résultats :
Affichage des résultats filtrés du moteur de recherche WordPress
Affichage des résultats filtrés du moteur de recherche WordPress

Exclure des pages ou des articles des résultats du moteur de recherche de WordPress via une extension WP

Je préfère largement utiliser des snippets plutôt que d’installer un plugin WordPress. La plupart du temps, quelques lignes de code suffisent, sans alourdir votre installation WordPress avec une extension WP supplémentaire à maintenir et potentiellement source de failles de sécurité WordPress (même si la mise à jour automatique des plugins WordPress est possible).
LIRE AUSSI  Comment télécharger un thème WordPress sur TemplateMonster ?
Voici un plugin WordPress qui vous permettra d’exclure simplement des pages ou articles de la recherche : Exclude Pages from Search Cette extension vous permet de filtrer les résultats via une interface graphique, sans toucher au code. Depuis chaque page ou article, une case à cocher vous permet de l’exclure de la recherche. Pratique si vous n’êtes pas à l’aise avec PHP.

Foire aux questions

Est-ce que ce snippet fonctionne avec WooCommerce ?

Oui. Les pages de confirmation ou d’annulation de paiement WooCommerce ont chacune un identifiant WordPress. Renseignez ces IDs dans le tableau pagesAExclure et elles disparaîtront des résultats de la recherche, comme n’importe quelle autre page.

Comment trouver l’identifiant (ID) d’une page ou d’un article WordPress ?

Dans l’administration WordPress, ouvrez la page ou l’article en mode édition. Regardez l’URL dans la barre d’adresse : vous y trouverez un paramètre post=XXXX, où XXXX est l’identifiant. Vous pouvez aussi survoler le titre dans la liste des pages, l’ID apparaît dans le lien affiché en bas du navigateur.

Peut-on exclure un type de contenu entier de la recherche WordPress ?

Oui. Plutôt que de lister des IDs, modifiez le filtre pre_get_posts pour cibler un post type complet. Par exemple, utilisez $query->set('post_type', array('post')) pour n’afficher que les articles. Cela évite de maintenir une liste d’IDs.

Faut-il un thème enfant pour utiliser ce snippet ?

C’est fortement recommandé. Si vous modifiez directement le fichier functions.php de votre thème parent, vos modifications seront effacées à chaque mise à jour du thème. Avec un thème enfant WordPress, vos personnalisations sont conservées.

Le filtre pre_get_posts affecte-t-il d’autres requêtes que la recherche ?

Potentiellement oui, si vous ne conditionnez pas correctement le filtre. Dans le snippet présenté ici, la condition if ($query->is_search) limite l’effet aux requêtes de recherche uniquement. Sans cette condition, vous risquez d’affecter également l’affichage des archives ou de la page d’accueil.

Steve Chevillard

A propos de Steve Chevillard

Je suis responsable du numérique pour Philo éditions (Philosophie magazine, Sciences Humaines, Philonomist) et j'utilise WordPress depuis la fin des années 2000. J'ai créé astuceswp.fr en 2018 pour partager mon expérience et aider ceux qui veulent se lancer sur WordPress ou aller plus loin avec leur site. Je publie des tutoriels pratiques sur WordPress, l'hébergement, le SEO et les outils numériques, en essayant de rester le plus clair et accessible possible. Mon objectif : vous donner les clés pour être autonome sur votre site, sans vous noyer dans le jargon technique.

3 Commentaires sur “Comment exclure des pages ou articles des résultats de la recherche WordPress ?”

  1. Bonjour,

    Si je veux au contraire que le résultat de la recherche n’inclut que certaines pages définies. Quel serait le code à ajouter à functions.php ? Merci

    1. Vous pouvez tester ce code qui modifie le comportement de la recherche pour effectuer votre recherche dans les pages/articles sélectionnés

      // filtrer la recherche WP
      function ma_recherche_filter( $query ) {
      $pagesAInclure = array( 2732, 2746, 2738, 2751, 2747 ); //id page/post à inclure (séparés par une virgule)
      if ( $query->is_search ) {
      $query->set( 'post__in', $pagesAInclure );
      }
      return $query;
      }
      add_filter('pre_get_posts','ma_recherche_filter');

      1. Bonjour,

        J’ai essayé ce code en l’ajoutant à functions.php mais cela ne fonctionne pas. Mes recherches ne sont pas filtrées, est ce que vous avez une idée d’à quoi cela peut être du ?

        Merci beaucoup pour votre aide !

Les commentaires sont fermés.