web-dev-qa-db-ja.com

カスタム分類法を検索に追加する方法

だから私は "車"と呼ばれるカスタム分類法があります。ユーザーが検索するときは、分類法でも検索するようにします。 「アウディ」という用語とキーワード「アウディ」によるユーザ検索がある場合、「自動車」という分類法では、「アウディ」という用語でタグ付けされた投稿を返すことになります。

私はこれを試しました:

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 );

しかしそれは検索を完全に破ります。これは可能ですか私は何かを逃しましたか?

2
user995317

元の検索クエリを設定解除することを試みることができます、そうでなければあなたは2倍になり、組み合わせは何も結果にならないかもしれません?例えば、あなたの関数に追加してみてください。

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

_アップデート_

よくわからないが、AND演算子-I think を試すと、既存のクエリに置き換えるのではなく追加される。

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 );

注:@PieterGoosenで説明されているフィールドnameの使用法をslugに変更し、prefetchしたterm slugをtax queryに渡すように変更しました。

2
majick