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 :
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. 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 :

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). 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.

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
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');
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 !