現在WordPressでオリジナルテーマを制作しているのですが、希望の動作が分からないので投稿させていただきました。よろしくお願いします。
カスタムタクソノミーに階層を持たせてカテゴリーのように使用しています。
親タクソノミーに属し、子タクソノミーに属していない記事のみ抽出したいのですが
方法がわかりません。
(階層構造)
親タクソノミーA
・記事1
∟子タクソノミーAA
・・記事2
・・記事3
get_term_byで呼び出した場合、親タクソノミーの記事が全て表示されてしまう。
(記事1、記事2、記事3)
get_termsのparentで呼び出した場合、子タクソノミーの記事のみ表示。
(記事2、記事3)
上記の記事1のみ取り出したいのですが方法を教えてください。
よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
こんな感じではないかと
'include_children' => false で子タクソノミーを除外できますね
以下の例はareaというタクソノミーで、term_idが4のpostsを取得
$posts = get_posts( array( 'tax_query' => array( array( 'taxonomy' => 'area', 'field' => 'term_id', 'terms' => 4, 'include_children' => false, ) ) ) ); var_dump($posts);
(追記)タクソノミーを除外する例
以下のようにtax_queryを追加してNOT INで、除外したいタクソノミーを指定すれば除外できます
以下の例ではterm_idが6を除外しています。
php
1$posts = get_posts( 2 array( 3 'tax_query' => array( 4 array( 5 'include_children' => false, 6 'taxonomy' => 'area', 7 'field' => 'term_id', 8 'terms' => 4, 9 ), 10 array( 11 'taxonomy' => 'area', 12 'field' => 'term_id', 13 'terms' => 6, 14 'operator' => 'NOT IN' 15 ) 16 ) 17 ) 18); 19var_dump($posts);
(追記) 複数の子タクソノミーがある場合
php
1$child_term_ids = array(); 2foreach ($child_taxs as $child_tax) : 3 $child_term_ids[] = $child_tax->term_id; 4endforeach; 5 6$posts = get_posts( 7array( 8'tax_query' => array( 9array( 10'include_children' => false, 11'taxonomy' => 'area', 12'field' => 'term_id', 13'terms' => $parent_tax->term_id, 14), 15array( 16'taxonomy' => 'area', 17'field' => 'term_id', 18'terms' => $child_term_ids, 19'operator' => 'NOT IN' 20) 21) 22) 23);
投稿2016/10/13 13:18
編集2016/10/16 01:35総合スコア6586
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/15 03:04
2016/10/15 04:56
2016/10/15 14:26
2016/10/15 21:02 編集
2016/10/16 00:49
2016/10/16 01:36
2016/10/16 02:05
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。