問題描述
Theres 一種在 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 對象傳遞到用於設置該對象屬性的方法中。
question you copied code from 錯誤地使用過濾器,我覺得這是您問題的關鍵。
是的,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' );
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。