私はしばらくの間特定の問題にこだわっていて、それを回避する方法をまだ見つけていません。私はカスタムウィジェットを持っており、各ウィジェットに対してカテゴリAND/ORタグに基づいて投稿をフィルタリングする機能を追加しました(この機能は動作します)。私は今、あなたが除外したいカテゴリのIDを入力できるカスタムフィールドを各ウィジェットに含めることによってそれを拡張しようとしています(カスタムフィールドは既にウィジェットにあり、ユーザー入力を保存します)。
理解を助けるために私がこれまでに持っているものをあなたに見せましょう:
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => $num_posts,
'cat' => -5,
'tax_query' => array(
'relation' => 'OR',
array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $category,
),
array(
'taxonomy' => 'post_tag',
'field' => 'id',
'terms' => $tags
),
),
'offset' => 1,
);
ご覧のとおり、$ categoryと$ tagsの両方に2つの入力配列を取り入れています(これは問題なく機能しています)が、機能していないように思われるのは、
'cat' => -5,
Tax_query配列を完全に削除すると、excludeカテゴリは完全に機能します。そこで、tax_queryがexcludeをオーバーライドしているように見えますか。
誰かが私を正しい方向に向けることができれば、それは素晴らしいことです。
ありがとうございます。
cat
-パラメータはtax_query
によって上書きされません。代わりに、それはtax_query
に追加されます。したがって、'cat' => -5
を使用すると、次の配列がtax_query
に追加されます。
(
[taxonomy] => category
[terms] => Array
(
[0] => 5
)
[include_children] => 1
[field] => term_id
[operator] => NOT IN
)
結果として得られる分類クエリは、OR演算子を持つ3つの異なる句で構成されています。したがって、あなたのケースでは、'cat' => -5
を追加することは単にtax_query
に上で説明された配列を追加します。
$category
のいずれかのカテゴリで$tags
内のいずれかのタグ内tax_query
にネストした条件を使用する方法はありません。探している条件($category
のカテゴリに投稿する、またはtags
のタグがあるが、カテゴリ5にはない場合)を達成するには、 posts_where
にフックする必要があります。そしておそらく posts_join
。
興味のある人なら誰でも同じことがmeta_query
にも言えます。これは入れ子になったクエリもサポートしません。
編集
posts_where
を使うposts_where
を使用してこれを達成するために、あなたはあなたのコメントに応えて、あなたはあなたがカテゴリーを除外したいただ一つの質問にフィルターを適用したいと思うでしょう。そのためには、クエリを作成する前にフィルタを追加し、その後それを削除します。
add_filter( 'posts_where', 'myplugin_posts_where' );
$query = new WP_Query( $args );
remove_filter( 'posts_where', 'myplugin_posts_where' );
編集
WHERE
-句を作成するget_tax_sql
を使用して追加のWHERE
-句を作成すると、SQLを手動で作成する必要がなくなり、用語IDが自動的に用語分類IDに変換されるので便利です。
$clauses = get_tax_sql( array(
array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => 2,
'operator' => 'NOT IN'
)
), $wpdb->posts, 'ID' );
$where .= $clauses['where'];
入れ子になった分類法に関する最新の回答を提供するだけで、それらは実際にサポートされています。上記の選択された答えは古くなっています/少し誤解を招きやすいです。 WordPress Coreはv4.1から ネスト分類法をサポートしています
WordPressコーデックスから取られた
より複雑なクエリを作成するために、 'tax_query'句をネストすることができます。例:見積もりカテゴリORにある表示投稿は、どちらも見積もり投稿形式であり、かつ知恵カテゴリにあります。
$args = array(
'post_type' => 'post',
'tax_query' => array(
'relation' => 'OR',
array(
'taxonomy' => 'category',
'field' => 'slug',
'terms' => array( 'quotes' ),
),
array(
'relation' => 'AND',
array(
'taxonomy' => 'post_format',
'field' => 'slug',
'terms' => array( 'post-format-quote' ),
),
array(
'taxonomy' => 'category',
'field' => 'slug',
'terms' => array( 'wisdom' ),
),
),
),
);
$query = new WP_Query( $args );
https://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters