WordPress: Exclure des pages / articles de la recherche

Si, dans WordPress, vous vous demandez comment exclure des pages / articles de la recherche, voici la réponse.

De base WordPress propose une recherche sur l’ensemble des posts du site : post simple, page, type de page personnalisé … Pour supprimer, exclure ou retirer des éléments de la recherche, voici comment procéder.

Ajoutez cette fonction dans le fichier functions.php de votre thème.

// search filter
function my_search_filter( $query )
{
    if ( $query->is_search )
    {
        $query->set( 'post__not_in',array( 12, 23, 65 ) );
    }
    return $query;
}
add_filter('pre_get_posts','my_search_filter');

$query->set( );
permet d’exécuter une requête avec des valeurs en paramètres.

Dans l’exemple ci-dessus, je demande de rechercher les posts dont l’identifiant n’est pas 12, 23 ou 65 : post__not_in

Pour exclure une catégorie, mettre category__not_in et en valeur les identifiants de catégorie.

Restreindre la recherche

Au contraire pour limiter la recherche à une liste de catégorie ou de post, supprimez not_ de la requête.

9 Comments

  1. Jean-Claude sur 8 mai 2015 à 00:46

    Bonjour,
    Merci beaucoup pour vos astuces bien utiles.
    Toute fois, bien qu’elles marchent sur mon site, elles marchent également dans la partie administration du site. Ainsi j’ai bien limité ma recherche à une seule catégorie, mais cela a limité également la barre de recherche de l’administration à cette catégorie.
    Comment limiter uniquement la recherche public et non celle de l’administration?
    Cordialement JC

  2. MonsieurCroquette sur 30 novembre 2011 à 16:55

    Je voulais simplement vous remercier à nouveau pour ce site Web étonnant que vous avez fait ici. Il est plein d’idées pour ceux qui sont sérieusement intéressés par ce sujet, plus précisément cet article très instructif.
    Merci le spécialiste wordpress ;-)

  3. Fred Aubailly sur 8 novembre 2011 à 19:21

    Super utile et simple à mettre en place.
    Perso, j’ai malheureusement un conflit avec un plugin en place… Ah les vilains plugins…

    Merci pour le code.

  4. Bob le dev sur 8 novembre 2011 à 14:12

    Très utile si on veut soulager la requête, ça tourne très bien merci :) !

  5. vero sur 19 décembre 2010 à 20:16

    bonjour,
    je cherche desespérement à limiter ma fonction de recherche aux seuls titres et je ne trouve pas la solution (je débute sur wp il faut dire). savez vous comment faire , pour l’instant le code que j’ai installé est :
    <form method="get" id="searchform" action="/ »>

    <input type="text" value=" » name= »s » id= »s » />

    • Thierry Pigot sur 19 décembre 2010 à 22:21

      Salut,

      Si c’est pour limiter la fonction de recherche, ajoute ce code dans le fichier functions.php de ton théme:

      add_filter(‘posts_where’, ‘limit_search_where_to_title’ );

      function limit_search_where_to_title( $where )
      {
        global $wpdb;
        if( is_search() ) {
          $where = « AND `post_status` = ‘publish’ AND `post_title` LIKE ‘% ». mysql_real_escape_string( $_GET[‘s’] ) . »%' »;
         }

        return $where;
      }

      Si c’est pour limiter l’affichage des resultats, Il faut regarder si dans ton dossier de thèmes WordPress il y a un fichier search.php

      Si il existe, il faut modifier le code qui se trouve entre le < ?php if ( have_posts() ) : ?> et < ?php else : ?>
      C’est a cet endroit que se trouve le code qui permet d’afficher les informations de l’article.

      Si le fichier search.php n’existe pas, le plus simple est de recopier le fichier index.php et de le renommer search.php. En suite effectuer les modifications précédemment exposées.

      Ne pas hésiter si tu as besoin de plus d’informations.

      @+
      Thierry

      • Stef sur 7 septembre 2012 à 18:18

        Bonjour,

        Ce code fonctionne parfaitement. Cependant comment ajouter à ce dernier une recherche également dans les extraits (post_excerpt) svp ?

        Cdt,

        Stef

        • Thierry Pigot sur 7 septembre 2012 à 21:46

          Bonsoir Stéphane,

          Voici le code à ajouter dans le fichier functions.php de votre thème pour limiter la recherche au titre ou à l’extrait :


          < ?php add_filter('posts_where', 'limit_search_where_to_title' ); function limit_search_where_to_title( $where ) { global $wpdb; if( is_search() ) { $where = " AND `post_status` = 'publish' AND ( `post_title` LIKE '%". mysql_real_escape_string( $_GET['s'] ) . "%' OR `post_excerpt` LIKE '%". mysql_real_escape_string( $_GET['s'] ) . "%' ) "; } return $where; } ?>

          Thierry

Laissez un commentaire