$wp_query->set( 'tax_query', $tax_query );
を使用してフィルタリングするためにpre_get_posts
を使用しています
私はおそらくnew WP_Query
を使ってこれをやるほうが賢明ですが、誰かが何かを知っているなら私はそれを聞きたくありません
例えば:
/cpt/?taxo=this
は、分類用語== thisを持つすべてのcptを表示します。
$taxo_terms = [];
if( !empty( $_GET['taxo'] ) ){
$types = explode(',', $_GET['taxo']);
foreach ($types as $key => $val) {
$taxo_terms[$key] = sanitize_key($val);
}
}
else{
$taxo_terms[]='this'; // here's where things get ugly.
}
$tax_query = [];
if( !empty($taxo_terms) ){
$tax_query[] = [
'taxonomy' => 'taxo',
'field' => 'slug',
'terms' => $taxo_terms,
'operator' => 'AND',
];
$wp_query->set( 'tax_query', $tax_query );
}
次に、/cpt/?taxo=all
の種類にかかわらず、すべての投稿を表示するためにtaxo->terms
を追加します。
tax_query
を使って、ループから現在のpre_get_posts
をunset
する方法を見つけたいと思っています。
$wp_query->UNSET
への道はありますか?
$wp_query->set( 'tax_query', null );
を試しました
次の攻撃計画は、andまたはoperator、あるいはその両方と連携することです。
提案は大歓迎です。誰かが興味を持っていれば、より多くのコンテキストを提供できます。ありがとうございます。
編集:ここで見つけた便利なテクニック: 主なクエリを消去し、それを置き換えます
これで解決しました! :) Hat-tip gmazzap 有用な情報: メインクエリを削除して置き換えます
function wpse_286813_omit_all( $query_vars ){
// triggered also in admin pages
if ( is_admin() )
return $query_vars;
if( !empty($query_vars['taxo']) && $query_vars['taxo'] === 'all' ){
$query_vars['taxo']='';
}
return $query_vars;
}
add_filter( 'request', 'wpse_286813_omit_all' );