web-dev-qa-db-fra.com

Placer un type de message personnalisé dans les résultats de la recherche

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.

5
Tereza Vanacká

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é:

  1. publications avec profils CPT, peu importe si les mots clés recherchés sont dans le titre ou dans le contenu, classés par date décroissante
  2. messages avec mots-clés recherchés dans le titre, peu importe le type de message, classés par date décroissante
  3. les publications avec des mots clés recherchés dans le contenu, peu importe le type de publication, classées par date décroissante
6
gmazzap

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.

1