web-dev-qa-db-fra.com

Comment ajouter une taxonomie personnalisée à la recherche

J'ai donc une taxonomie personnalisée appelée "voitures". Je voudrais que lorsque l'utilisateur effectue une recherche, il cherche également à travers la taxonomie. Ce qui signifie que dans la taxonomie "voitures", si j'ai "Audi" terme et recherche d'utilisateur avec mot clé "audi", il retournera alors les messages qui sont marqués avec le terme "audi".

J'ai essayé ceci:

function mytheme_pre_get_posts( $query ) {
$query->set( 'tax_query', array(
        array(
            'taxonomy' => 'cars',
            'field'    => 'name',
            'terms'    =>  $_GET['s'],
        )
    ));
add_action( 'pre_get_posts', 'mytheme_pre_get_posts', 1 );

Mais cela casse complètement la recherche. Est-ce que ceci peut être fait même ou ai-je manqué quelque chose?

2
user995317

Vous pouvez essayer de désactiver la requête de recherche initiale, sinon vous risquez de doubler et la combinaison ne donne rien? Par exemple, essayez d'ajouter à votre fonction:

$query->set('s','');

METTRE À JOUR

Je ne suis pas sûr sur celui-ci, mais vous pouvez essayer l'opérateur AND -I think ceci ajoute à la requête existante au lieu de la remplacer ...

function mytheme_pre_get_posts( $query ) {
    if ( !is_admin() && $query->is_search() && $query->is_main_query() ) {
        $term = get_term_by('name', get_query_var('s'), 'cars');
        if ($term) {
            $query->set( 'tax_query', array(
                 array(
                    'taxonomy' => 'cars',
                    'field'    => 'slug',
                    'terms'    =>  $term->slug,
                    'operator' => 'AND'
                )
            ));
         }
    }
}
add_action( 'pre_get_posts', 'mytheme_pre_get_posts', 1 );

Remarque: modification de l'utilisation du champ name tel que mentionné par @PieterGoosen en slug et slug de terme pré-récupéré à transmettre à la requête fiscale, et conditions supplémentaires telles que mentionnées par @birgire.

2
majick