WordPress関数「get_posts
」でちょっと悩んだのでメモ。
$posts = get_posts($arg);
$argsに検索条件を設定して、条件に一致する投稿データを取得するわけですが。
カスタム投稿タイプ「製品情報(products)」を作り、
そこにカスタムタクソノミー「product_cat」を割り当て、
その下にカテゴリ「cat1」「cat2」「cat3」を用意したとします。
サイドメニューに以下のようなリンクリストを表示しようと思いまして・・・
●製品情報 ●cat1 ・製品A ・製品B ・製品C ●cat2 ・製品D ・製品E ・製品F ●cat3 ・製品G ・製品H ・製品I
今回の投稿はその途中段階でget_postsを使った際に困ったお話。
実際のリストの作成については、後日別の投稿にて。
各カテゴリ(cat1,cat2,cat3)に属するページ情報の取得を考えたとき、
「tax_query
を使えば楽勝~」と思い、以下のように設定。
//最初に設定した条件(cat1の場合) $args = array( 'posts_per_page' => '-1', 'tax_query' => array( array( 'taxonomy' => 'product_cat',//タクソノミー名を設定 'field' => 'slug',//条件フィールドにslugを指定 'terms' => 'cat1' //ここにカテゴリ(term)スラッグを設定 ) ) ); $posts_cat1 = get_posts($args);
ちなみに$wp_query->query($args)
ならこれでOK。
狙い通りの情報が取得できます。
が、get_posts
だとなぜか取得できない。空の配列(array(0){}
)が返されます。
うまくいったのは以下のコード。
post_type
の指定が必要でした。
//うまくいった設定(cat1の場合) $args = array( 'posts_per_page' => '-1', 'post_type' => 'products', //★この設定が必要 'tax_query' => array( array( 'taxonomy' => 'product_cat', 'field' => 'slug', 'terms' => 'cat1' ) ) ); $posts_cat1 = get_posts($args);
これだけのことがわかるまでに結構時間かけてしまった…。
$wp_query->query($args)
でうまくいっていたことがアダとなった…。
CODEXでもWP_Queryクラスを参考にするようなことを言っているからさ、同じだと思うじゃん~。
ま、これで作業が先に進めます。
では実際のリスト生成のコードはまたあとで…。