Exclure certaines pages dans WordPress

filtrer-rechercher

Comment Gérer vous présente une fonction pour filtrer le résultat de vos recherches dans WordPress en excluant certaines pages que vous ne souhaitez pas montrer à vos lecteurs.

Voici une façon de faire :

function search_filter($query) {

 if ( $query->is_search && $query->is_main_query() ) {
  $query->set( 'post__not_in', array( 46,73,80 ) );
 }

}
add_filter( 'pre_get_posts', 'search_filter' );

Explications :

Pour différentes raisons, nous pouvons être amenés à exclure certaines pages des résultats de recherche dans WordPress.

publicités

Ca peut-être la confirmation d’inscription à une newsletter, le résultat d’un test par exemple.

Quelque soit la raison, cette page est pertinente dans une action spécifique mais lorsque votre lecteur fait une recherche sur votre site, cela l’est moins lors d’un affichage des résultats liés à une recherche spécialement faite par l’internaute sur votre blog.

Avec une simple fonction que l’on ajoute dans notre fichier functions.php de notre thème (enfant de préférence) ou dans un plugin personnalisé, il est possible de le faire facilement.

La fonction is_main_query() est une fonction conditionnelle qui peut être utilisé pour évaluer si la requête en cours (comme dans la boucle) est la requête « principale ».

Dans array(), les chiffres correspondent à l’ID de la page ou du post que vous souhaitez exclure.

Dans l’exemple ci-dessus, les pages avec l’ID 46, 73, 80 ont été exclus du résultat des recherches. Vous avez juste besoin de changer ces numéros pour faire correspondre les ID des pages que vous voulez exclure.

Note : Cette fonction agit côté front-end (côté visible et publique de votre blog). Pensez à personnaliser le nom de votre fonction, ici nommée, search_filter.

Vous pouvez aussi limiter cet affichage uniquement à vos lecteurs et vous permettre de garder le résultat de ces recherches pour vous même lorsque vous êtes connectés en faisant par exemple :

function search_filter($query) {

 if ( !is_user_logged_in() && !current_user_can('manage_options') ) {

  if ( $query->is_search && $query->is_main_query() ) {
   $query->set( 'post__not_in', array( 46,73,60 ) );
  }

 }

}
add_filter( 'pre_get_posts', 'search_filter' );

Pour aller plus loin, avec de nombreux exemples pour personnaliser ces critères de recherche dans WordPress, regardez la documentation (en anglais) :

Plugin API/Action Reference/pre get posts


Partager cette page Comment Gérer :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strong>