J'utilise WP Query et les résultats obtenus lorsque le terme de recherche est utilisé ne fonctionnent pas comme je le souhaite. Par exemple, la recherche sur "art" renvoie également les résultats des mots contenant "art", tels que "partie". Comment puis-je éviter ça? et retourne juste les résultats pour 'art' contenant le mot exact 'art'.
C'est en fait une question délicate, car en énonçant exact il y a deux façons d'interpréter votre question -
Heureusement, vous pouvez le faire, mais la méthode 1 est de loin la plus simple. Ajoutez l’un de ces exemples à votre functions.php fichier -
Méthode 1
add_action('pre_get_posts', 'my_make_search_exact', 10);
function my_make_search_exact($query){
if(!is_admin() && $query->is_main_query() && $query->is_search) :
$query->set('exact', true);
endif;
}
La fonction my_make_search_exact()
sera appelée à chaque fois qu'une requête est effectuée, à l'aide du hook d'action pre_get_posts
.
Pour nous assurer de ne pas perturber la requête lorsque nous n'en avons pas besoin, nous vérifions dans la fonction que nous ne visualisons PAS la zone d'administration, que nous construisons la requête principale et que nous effectuons une recherche.
Méthode 2
add_filter('posts_search', 'my_search_is_exact', 20, 2);
function my_search_is_exact($search, $wp_query){
global $wpdb;
if(empty($search))
return $search;
$q = $wp_query->query_vars;
$n = !empty($q['exact']) ? '' : '%';
$search = $searchand = '';
foreach((array)$q['search_terms'] as $term) :
$term = esc_sql(like_escape($term));
$search.= "{$searchand}($wpdb->posts.post_title REGEXP '[[:<:]]{$term}[[:>:]]') OR ($wpdb->posts.post_content REGEXP '[[:<:]]{$term}[[:>:]]')";
$searchand = ' AND ';
endforeach;
if(!empty($search)) :
$search = " AND ({$search}) ";
if(!is_user_logged_in())
$search .= " AND ($wpdb->posts.post_password = '') ";
endif;
return $search;
}
Merci à tinyGod pour cette réponse - http://tinygod.pt/make-wordpress-search-exact/
Je pense que quelqu'un d'autre a déjà répondu à cette question: Cochez cette réponse , de @Sunyatasattva
Mais apparemment, WP_Query prend en charge des paramètres de recherche supplémentaires:
's' => $ s, // (chaîne) - Transmet la variable chaîne de requête à partir d'une recherche.
'exact' => true, // (bool) - indicateur pour qu'il ne corresponde qu'aux titres/messages entiers - La valeur par défaut est false.
'phrase' => true, // (bool) - indicateur permettant de faire une recherche d'expression - La valeur par défaut est false.
Plus à: https://Gist.github.com/luetkemj/2023628
J'espère que ça aide,