Tutoriels WordPress de confiance, quand vous en avez le plus besoin.
Guide du débutant pour WordPress
WPB Cup
25 millions+
Sites web utilisant nos plugins
16+
Années d'expérience WordPress
3000+
Tutoriels WordPress par des experts

Comment limiter les résultats de recherche à des types de publication spécifiques dans WordPress

Vous êtes-vous déjà demandé comment limiter vos résultats de recherche à des types de publication spécifiques ? Ce n'est pas très difficile. Nous vous avons déjà montré comment désactiver la fonction de recherche dans WordPress en modifiant le fichier functions.php. Maintenant, nous allons faire la même chose, sauf pour filtrer nos résultats de recherche.

Ouvrez votre fichier functions.php et ajoutez le code suivant :

function searchfilter($query) {

    if ($query->is_search && !is_admin() ) {
        $query->set('post_type',array('post','page'));
    }

return $query;
}

add_filter('pre_get_posts','searchfilter');

Remarquez la ligne qui dit

$query->set('post_type',array('post','page'));

Vous pouvez filtrer les résultats de recherche en modifiant les valeurs de la variable tableau. Actuellement, elle est définie pour afficher les articles et les pages, mais vous pouvez la modifier pour afficher ce que vous voulez.

Avis : Notre contenu est financé par nos lecteurs. Cela signifie que si vous cliquez sur certains de nos liens, nous pouvons percevoir une commission. Voir comment WPBeginner est financé, pourquoi c'est important et comment vous pouvez nous soutenir. Voici notre processus éditorial.

La boîte à outils WordPress ultime

Accédez GRATUITEMENT à notre boîte à outils - une collection de produits et de ressources liés à WordPress que tout professionnel devrait posséder !

Interactions des lecteurs

26 CommentsLeave a Reply

  1. comment puis-je obtenir des résultats de recherche uniquement par titre de publication ?

  2. Merci pour ce code – il a fonctionné, bien que vous l'ayez mis à jour pour la dernière fois en 2013 ! Mon thème utilise également une recherche instantanée et j'aimerais limiter les résultats là aussi. Comment pourrais-je faire ?

  3. Mon thème actuel affiche les articles avec quelques lignes de départ pour le terme/mot recherché. Je veux le personnaliser pour afficher ce paragraphe contenant le terme/mot recherché dans l'extrait de l'article. En d'autres termes, je veux afficher le texte pertinent dans l'extrait de l'article et non le paragraphe de départ dans les résultats de recherche. Quelqu'un peut-il m'aider à faire cela....

  4. Bonjour,

    Comment puis-je limiter les résultats de recherche pour des types de publication spécifiques ET des termes de taxonomie personnalisée spécifiques ?

  5. J'ai une fonction simple dans le fichier functions.php de mon thème, qui ne devrait filtrer que les articles par un terme de recherche... lorsque je recherche quelque chose maintenant, l'erreur HTTP 500 « Le site Web ne peut pas afficher la page » apparaît. Quelqu'un a une idée de ce qui ne va pas avec ma fonction ?

    function searchFilter($query) { if ($query->is_search) { wp_reset_query(); $args = array ( ‘s’ => $_GET[‘s’] ); query_posts( $args ); } } add_filter(‘pre_get_posts’, ‘searchFilter’);

  6. Ceci restreint tous les formulaires de recherche au type de publication personnalisé – y compris mon formulaire de recherche dans la barre latérale, qui doit renvoyer tous les résultats. Ceci fonctionne pour moi :

    function searchfilter($query) { if ($query->is_search && !is_admin() ) { if(isset($_GET[‘post_type’])) { $type = $_GET[‘post_type’]; if($type == ‘book’) { $query->set(‘post_type’,array(‘book’)); } } } return $query; } add_filter(‘pre_get_posts’,’searchfilter’);

    • Merci pour votre aide, j'ai amélioré votre code pour que les gens ne puissent rechercher que les types de publication autorisés.

      function searchfilter($query) { if ($query->is_search && !is_admin() ) { if(isset($_GET[‘post_type’])) { $types = (array) $_GET[‘post_type’]; $allowed_types = get_post_types(array(‘public’ => true, ‘exclude_from_search’ => false)); foreach($types as $type) { if( in_array( $type, $allowed_types ) ) { $filter_type[] = $type; } } if(count($filter_type)) { $query->set(‘post_type’,$filter_type); } } } } add_filter(‘pre_get_posts’,’searchfilter’);

      • Comment cela est-il implémenté ? Si je lis correctement le commentaire de Greg, nous voulons un seul formulaire limité à un type de publication, tout en conservant la recherche par défaut intacte pour les autres zones du site.

        Je demande car un site sur lequel je travaille a besoin d'une « Bibliothèque de ressources » consultable, que j'aimerais construire sans compromettre la fonctionnalité de recherche normale.

  7. Bonjour, est-il possible de limiter la recherche uniquement au titre, à la catégorie et aux tags des articles ?

  8. Bonjour,

    Je ne suis pas en mesure de restreindre les pages dans le filtre de recherche.
    J'ai juste besoin de la recherche dans les articles et non dans les pages.

    $query->set(‘post_type’,array(‘post’));
    Cela affiche aussi les pages.

  9. J'ai utilisé ce code pour restreindre mes résultats de recherche aux Pages, pas aux Articles. Cela a fonctionné à cet égard, cependant, il semble qu'il ne recherche que les noms des Pages par opposition au contenu. Par exemple, si un utilisateur recherche « prix », la page « Prix » sera un résultat, mais s'il recherche « coût » ou « dépense » (qui sont tous deux des mots sur la page des prix), rien n'est trouvé. Y a-t-il un extrait de code qui me manque ?

  10. Hi,
    I have a question and I couldn’t get a solution since last month.
    I have lost of categories, pages and re-directions in my blog so my search box finds many unnecessary results when you try to search something. I want to customize my search.php for only categories part. In other words, we you search something, the results should be only from categories sections. So I will be get rid of redundant & duplicated results. My current codes are as below…Please help me :)

  11. Il y a un problème avec votre extrait :

    Il limite les résultats de recherche dans le backend, vous devriez l'encapsuler avec :


    if ( !is_admin() ) {
    // snippet
    }

  12. Alors, comment appliqueriez-vous cela à une barre de recherche spécifique ? Cela n'appliquerait pas le filtre à toutes les barres de recherche de votre site, n'est-ce pas ?

  13. Comment puis-je limiter les résultats de recherche pour n'afficher que les pages ?

Laisser une réponse

Merci d'avoir choisi de laisser un commentaire. N'oubliez pas que tous les commentaires sont modérés conformément à notre politique de commentaires, et votre adresse e-mail ne sera PAS publiée. Veuillez NE PAS utiliser de mots-clés dans le champ du nom. Ayons une conversation personnelle et significative.