web-dev-qa-db-ja.com

Pre_get_postsフィルタで$ query-> set( 'tax_query'を使う方法はありますか?

pre_get_postsフィルターで$query->set('tax_query', ...)を使う方法はありますか?たとえば、次のコードはクエリを変更しません。カスタム検索から$分類法を構築していることに注意してください。

function custom_search_filter($query) {
        ...

        // array('taxonomy' => 'category', 'field' => 'id', 'terms' => array( 41,42 ), 'operator' => 'IN')
        $taxonomies = implode(',', $taxonomy_arr);

        // https://wordpress.stackexchange.com/questions/25076/how-to-filter-wordpress-search-excluding-post-in-some-custom-taxonomies

        $taxonomy_query = array('relation' => 'AND', $taxonomies);

        $query->set('tax_query', $taxonomy_query);
    }

    return $query; 
}


add_filter( 'pre_get_posts', 'custom_search_filter', 999 );

前もって感謝します。

フィルタ内の$query変数はWP_Queryオブジェクトを表すので、そのオブジェクトのプロパティを設定するためのメソッドに新しいWP_Queryオブジェクトを渡さないでください。

あなたがコードをコピーした質問 は誤ってフィルタを使用していました。

はい、tax_querypre_get_posts(または同様にparse_request)フィルタ/アクション内で使用できます。

これは例です:
検索クエリにカスタム分類法を指定します

function search_filter_get_posts($query) {
    if ( !$query->is_search )
        return $query;

    $taxquery = array(
        array(
            'taxonomy' => 'career_event_type',
            'field' => 'id',
            'terms' => array( 52 ),
            'operator'=> 'NOT IN'
        )
    );

    $query->set( 'tax_query', $taxquery );

}
add_action( 'pre_get_posts', 'search_filter_get_posts' );
32
t31os

クエリはすでに解析されているため、税クエリでは、クエリにtax_queryオブジェクトも設定する必要があります。 子分類法の項目を除外するように分類法ページを変更する の答えを参照してください。

2
Tanner Moushey