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 améliorer les résultats de la recherche. Cet article vous montrera différentes méthodes pour limiter vos résultats de recherche à des types ou catégories d’articles spécifiques et comment modifier le nombre par défaut ou les résultats de recherche par page.
Limiter les résultats de 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 comporte des sections telles que des thèmes, des plugins et le blog.
1. Utiliser un champ de saisie caché dans votre Searchform.php
C’est la méthode que j’utilise actuellement sur Themelocal.com. Ainsi, lorsque les internautes effectuent une recherche sur le site principal, ils n’obtiennent que les résultats de recherche de la catégorie « Thèmes WordPress ». Tout ce que vous avez à faire est d’ajouter une entrée masquée à votre searchform.php avec un identifiant de « chat » et l’identifiant de catégorie pour la valeur.
Un formulaire de recherche de base.php
<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. Ajouter 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 à 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" );
?>
Exclusion de 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 afficher uniquement 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_search() && $query->is_main_query() && ! is_admin() ) {
$query->set( 'post_type', 'post' );
}
}
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 une condition dans votre fichier search.php juste après « while ( have_posts()) ». Ceci 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 leur ID en utilisant le code suivant ajouté dans le fichier functions.php. Modifiez simplement le tableau des identifiants pour inclure les identifiants des pages ou des publications que vous souhaitez exclure.
// Exclude specific posts/pages from search
function myprefix_exclude_pages_from_search( $query) {
if ( $query->is_search() && $query->is_main_query() && ! is_admin() ) {
$exclude_ids = array( 7, 19 , 21 ); // Array of the ID's to exclude
$query->set( 'post__not_in', $exclude_ids );
}
}
add_filter( 'pre_get_posts', 'myprefix_exclude_pages_from_search' );
Limiter la recherche au type de publication
L’une des raisons d’utiliser les types de ports dans WordPress est que vous ne les voulez pas dans votre flux ou votre boucle wp principale, c’est pourquoi ils sont parfaits pour des éléments tels que 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 à l’intérieur de votre formulaire de recherche et vous remplaceriez simplement l’endroit où il est écrit « portfolio » par votre propre nom de type de publication personnalisé. Cette méthode est idéale si vous avez une certaine section de 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 nombre défini sous Paramètres > Lecture (les pages de blog s’affichent au maximum…) pour définir combien de résultats 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->is_main_query() && ! is_admin() ) {
$query->set( 'posts_per_page', '10' );
}
}
add_filter( 'pre_get_posts', 'myprefix_search_posts_per_page' );
Ce code irait 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 nombre en ce que vous voulez. Pour rendre vos résultats de recherche illimités, utilisez -1. Ou utilisez un plugin comme Recherche d’ensemble d’outils pour ajouter de la pagination à vos résultats.
Recherche avancée/meilleure
WordPress par défaut recherche en fonction de tout contenu dans 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 consulter ou recherchez-la dans votre tableau de bord WordPress sous Plugins> Ajouter un nouveau.
Ce plugin vous permettra de mieux contrôler la recherche par défaut si vous souhaitez rechercher par meta, catégories, tags, termes, titre…etc. Vous pouvez inclure ou exclure certains types de publication de la recherche, exclure les publications antérieures à une date spécifique, modifier le nombre d’éléments affichés dans les résultats de la recherche et plus encore !