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