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

Dans le cadre de la réalisation d’un site web WordPress pour un client, j’ai dû cette semaine intervenir sur le moteur de recherche de WordPress. Ou plus précisément sur l’affichage des résultats de la recherche de WordPress. Je vous explique le problème lié au moteur de recherche rencontré : ce site WordPress possède plusieurs pages de retour suite à un paiement par carte bancaire (confirmation de paiement / échec du paiement / annulation du paiement etc…). Le problème c’est que ces pages (qui sont uniquement liés au paiement par carte bancaire d’un client) figurent parmi les résultats de la recherche et que mon client ne veut pas voir afficher ces pages via le moteur de recherche WP. Je vous expliquerai donc aujourd’hui comment ne pas afficher des pages ou articles des résultats du moteur de recherche de votre thème WordPress.

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 créer un thème enfant pour Wordpress ?
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

Comme souvent avec WordPress, vous pouvez personnaliser l’affichage des résultats du moteur de recherche WP 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, comme d’habitude, à copier dans le fichier functions.php de votre thème WordPress. En espérant pour vous, bien sûr, que vous avez suivi mes conseils avec la mise en place d’un thème enfant WordPress pour éviter que la personnalisation de votre thème soit écrasée lors de la mise à jour de votre thème de base.

LIRE AUSSI  Comment télécharger un thème WordPress sur TemplateMonster ?

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 n’est pas très compliqué à comprendre. Enfin, si PHP ou la programmation informatique vous parle… On définit un tableau, nommé ici pagesAExclure qui contient les identifiants des pages ou articles que l’on ne veut pas voir apparaitre dans les résultats de la recherche WordPress. Il vous suffit donc de repérer les id de vos pages / articles à exclure et de les saisir ici 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 puis retournez à votre recherche, vous verrez que les pages/articles mentionnées ci-dessus dans le code ont disparu des résultats de la recherche WP :

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

Si vous avez déjà lu quelques articles sur ce site, vous savez qu’il me reste quelques réflexes de développeur web et que je préfère largement utiliser des snippets plutôt que d’installer un plugin WordPress. Car le plus souvent, vous arriverez au même résultat en quelques lignes de codes plutôt qu’avec une extension WP qui alourdit votre installation WordPress, qu’il faut mettre à jour (même si la mise à jour automatique des plugins WordPress est possible) et qui est potentiellement une faille de sécurité WordPress.

LIRE AUSSI  Comment installer un thème Wordpress ?

Voici donc un plugin WordPress qui vous permettra d’exclure simplement des pages ou articles de la recherche :
https://fr.wordpress.org/plugins/exclude-from-search/

Cette extension (pas encore traduite en français) vous permettra de filtrer facilement les résultats du moteur de recherche en excluant certaines pages ou articles des résultats de la recherche WordPress.

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.