En plus des articles et des pages, il y a des profils sur mon site. Existe-t-il un moyen de les pousser en haut des résultats de recherche? Actuellement, les résultats sont classés en premier par mot-clé, puis par date. Le problème est que les messages (sur les personnes, par exemple les annonces) sont presque toujours plus récents que les profils. C'est logique: le profil n'a été ajouté qu'une seule fois, les messages sont postés en permanence. Donc, le profil peut être dans le top 10, mais pas non plus. S'il existe dix nouveaux messages sur la personne dont le nom a été recherché, son profil sera trop profond dans la liste (cas courant). Il est faux. Si je cherche le nom de la personne, le profil est toujours le contenu le plus pertinent, il doit donc toujours être le premier résultat.
Depuis WP 3.7, il existe un filtre "posts_search_orderby"
qui permet de définir le classement de la recherche.
Pour être sûr que le filtre fonctionne comme prévu, définissez "orderby"
sur "relevance"
.
add_action( 'pre_get_posts', function( $query ) {
if ( $query->is_search() ) {
$query->set( 'orderby', 'relevance' );
}
} );
et ensuite, en supposant que vos profils CPT slug soient "" profiles ":
add_filter( 'posts_search_orderby', function( $search_orderby ) {
global $wpdb;
return "{$wpdb->posts}.post_type LIKE 'profiles' DESC, {$search_orderby}";
});
De cette manière, comme d'habitude, tous les articles contenant les mots-clés recherchés dans le titre ou le contenu de l'article seront affichés, mais dans l'ordre indiqué:
WordPress vous permet de filtrer les résultats d'une recherche. Par défaut, il recherche dans les articles et les pages, mais vous pouvez ajouter vos types d’envois de douane:
function searchfilter($query) {
if ($query->is_search && !is_admin() ) {
$query->set('post_type',array('course','post','page'));
}
return $query;
}
add_filter('pre_get_posts','searchfilter');
Le code ci-dessus va filtrer les résultats de la recherche, vous donnant des posts de types: post, page, cours (par exemple).
J'espère que cela vous aide.