Nous savons tous que la fonction de recherche par défaut de WordPress n’est pas très bonne ou du moins pas aussi bonne que Google 🙂, mais il existe quelques astuces pour aider à améliorer les résultats de recherche. Cet article vous montrera différentes méthodes pour limiter vos résultats de recherche à des types ou catégories de publications spécifiques et comment modifier le nombre par défaut ou les résultats de recherche par page.

Limiter les résultats de la recherche WordPress par catégorie

Voici quelques méthodes que vous pouvez utiliser pour limiter vos résultats de recherche par catégorie, ce qui peut être très utile pour des sites comme Themelocal.com qui contient des sections telles que des thèmes, des plugins et le blog.

1. Utilisation d’un champ de saisie masqué dans votre Searchform.php

C’est la méthode que j’utilise actuellement sur Themelocal.com, donc lorsque les gens recherchent le site principal, ils n’obtiendront que les résultats de la recherche de la catégorie «Thèmes WordPress». Tout ce que vous avez à faire est d’ajouter une entrée cachée à votre searchform.php avec un identifiant de “cat” et l’identifiant de catégorie pour la valeur.

Un searchform.php de base

<form method="get" action="<?php echo esc_url( home_url( '/' ) ); ?>">
    <input type="text" size="16" name="s" value="Search"  />
    <input type="submit" value="Go" />
</form>

Ajoutez ce qui suit pour limiter la catégorie avec un ID de 5

<input type="hidden" name="cat" id="cat" value="5" />

Code complet

<form method="get" action="<?php echo esc_url( home_url( '/' ) ); ?>">
    <input type="hidden" name="cat" id="cat" value="5" />
    <input type="text" size="16" name="s" value="Search"  />
    <input type="submit" value="Go" />
</form>

2. Ajout d’une instruction de requête à votre fichier Search.php

Une autre méthode utile pour limiter vos résultats de recherche à des catégories spécifiques consiste à ajouter une requête à votre fichier search.php juste avant l’instruction if.

Inclure des catégories dans la recherche

En utilisant des ID positifs dans la requête, vous pouvez définir les catégories que vous souhaitez afficher dans vos résultats de recherche (afficher les catégories avec les ID 1, 2 et 3).

<?php
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
query_posts( "s=$s&paged=$paged&cat=1,2,3" );
?>

Exclure des catégories de la recherche

Vous pouvez également utiliser des ID négatifs pour exclure certaines catégories de votre page de recherche (exclure la catégorie avec un ID de 7)

<?php
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
query_posts( "s=$s&paged=$paged&cat=-7" );
?>

Exclure des pages de votre page de recherche

Vous trouverez ci-dessous quelques façons de limiter vos résultats de recherche pour exclure des pages des résultats et n’afficher que les publications.

Utiliser une fonction

Insérez simplement la fonction suivante dans votre fichier functions.php

// Remove pages from search results
function exclude_pages_from_search($query) {
    if ( $query->is_main_query() && is_search() ) {
        $query->set( 'post_type', 'post' );
    }
    return $query;
}
add_filter( 'pre_get_posts','exclude_pages_from_search' );

Utilisation d’un conditionnel dans votre fichier Search.php

Une autre façon de supprimer des pages de votre fichier search.php est d’insérer un conditionnel dans votre fichier search.php juste après «while (have_posts ())». Ce n’est pas recommandé si vous utilisez un thème tiers, car si vous mettez à jour le thème à l’avenir, vous perdrez vos modifications, s’il s’agit de votre propre thème personnalisé, tout va bien.

<?php
if ( have_posts() ) : while ( have_posts() ) : the_post();
   // Exclude pages from the loop
   if ( is_search() && ( $post->post_type=='page' ) ) {
       continue;
   } ?>

Exclure une ou plusieurs pages spécifiques

Vous pouvez également exclure des articles / pages spécifiques de vos pages de résultats de recherche sur leurs identifiants en utilisant le code suivant ajouté dans le fichier functions.php. Modifiez simplement le tableau d’identifiants pour inclure les identifiants des pages ou des articles que vous souhaitez exclure.

// Exclude specific posts/pages from search
function exclude_pages_from_search($query) {
    if ( $query->is_main_query() && is_search() ) {
        $exclude_ids = array( 7, 19 , 21 ); // Array of the ID's to exclude
        $query->set( 'post__not_in', $exclude_ids );
    }
    return $query;
}
add_filter( 'pre_get_posts','exclude_pages_from_search' );

Limiter la recherche au type de publication

L’une des raisons d’utiliser les types de port dans WordPress est que vous ne les voulez pas dans votre flux ou votre boucle principale wp, c’est pourquoi ils sont parfaits pour des choses comme les curseurs, les témoignages, les services, etc. Cependant, vos publications personnalisées peuvent toujours apparaître dans votre page de résultats de recherche.

1. Exclure un type de publication personnalisé des résultats de recherche

Tout ce que vous avez à faire pour exclure les publications personnalisées des résultats de recherche est de définir l’argument suivant lors de la définition de votre publication personnalisée (Plus d’informations):

'exclude_from_search' => true

2. Utilisation d’un champ masqué dans le formulaire de recherche pour afficher uniquement les publications d’un type de publication personnalisé spécifique

Vous pouvez également utiliser un champ masqué dans votre formulaire de recherche de la même manière que vous l’avez fait pour limiter les catégories si vous souhaitez configurer un formulaire de recherche avancée qui ne recherchera que dans le type de publication personnalisé spécifié.

<input type="hidden" name="post_type" value="portfolio" />

Ce champ supplémentaire irait dans votre formulaire de recherche et vous remplaceriez simplement l’endroit où il est dit «portfolio» par votre propre nom de type de publication personnalisé. Cette méthode est idéale si vous avez une certaine section sur votre site qui utilise des types de publication personnalisés et que vous souhaitez que les utilisateurs puissent rechercher uniquement dans ces publications spécifiques.

Modification du nombre de résultats par page

Par défaut, WordPress utilise le numéro défini sous Paramètres> Lecture (les pages de blog s’affichent au plus…) pour définir le nombre de résultats qui apparaissent sur la page de résultats de recherche. Si vous souhaitez afficher plus, moins ou une infinité de résultats sur votre page de recherche, vous pouvez le faire en utilisant le code suivant:

// Alter search posts per page
function myprefix_search_posts_per_page($query) {
    if ( $query->is_search ) {
        $query->set( 'posts_per_page', '10' );
    }
    return $query;
}
add_filter( 'pre_get_posts','myprefix_search_posts_per_page' );
Ce code ira dans votre fichier functions.php. De préférence dans votre thème enfant si vous travaillez avec un thème d’un autre développeur. Le code définira vos résultats de recherche sur «10» par page. Vous pouvez changer le numéro en ce que vous voulez. Pour rendre vos résultats de recherche illimités, utilisez -1. Ou utilisez un plugin comme Recherche de jeu d’outils pour ajouter une pagination à vos résultats.

Recherche avancée / améliorée

WordPress par défaut recherche en fonction de n’importe quel contenu de vos articles et pages. Il serait possible de modifier le fonctionnement de la recherche via des fonctions, mais c’est assez complexe, donc si vous souhaitez modifier le fonctionnement réel de la recherche (ce qu’elle recherche), vous pouvez envisager d’utiliser à la place un plugin tel que le Recherche étendue WP brancher. Cliquez sur la bannière ci-dessous pour la vérifier ou recherchez-la dans votre tableau de bord WordPress sous Plugins> Ajouter nouveau.

Ce plugin vous permettra de mieux contrôler la recherche par défaut si vous souhaitez effectuer une recherche par méta, catégories, tags, termes, titre… etc. Vous pouvez inclure ou exclure certains types de publications de la recherche, exclure les publications qui sont plus anciennes qu’une date spécifique, modifier le nombre d’éléments affichés dans les résultats de la recherche et plus encore!

Share: