[WordPress]カスタムタクソノミーで分類した特定のタームに所属するカスタム投稿記事を取得し表示する | ハイファイブクリエイト

high five create(ハイファイブクリエイト) トップページ

ウェブログ

[WordPress]カスタムタクソノミーで分類した特定のタームに所属するカスタム投稿記事を取得し表示する


WordPressネタです。
特定のカスタムタクソノミーに分類され、かつ特定のタームに所属するカスタム投稿記事を取得して、自由に表示するTIPSです。
マニアックですが、自分的にも忘れないようにメモ書きとして残しておきます。

カスタム投稿記事をループさせる

これはさほど難しくありません。ループにはquery_postやWP_Query、get_postsなどいくつか取得できるタグがありますが、get_postsで取得した例文です。

これだけであれば以下のようにカスタム投稿記事のリンク付き記事一覧が生成されます。

Custom post list 2

簡単ですね。これならば問題ないんですが、一つのカスタム投稿内において、カスタムタクソノミーに分類され、いくつかタームを設定している場合もあると思います。そのように「特定のカスタム投稿タイプかつ、特定のタームに属する記事のみループさせたい」となると話が変わります。

タクソノミーとタームを設定してループさせる

仮に、投稿タイプを「制作事例」、タクソノミーを「エリア」、タームに「国内」「海外」となるカテゴライズされた記事があるとし、「国内だけの記事一覧を表示させる」というコードを書きます。

・カスタム投稿タイプ:制作事例(works)
・カスタムタクソノミー:エリア(area)
・ターム:国内(domestic)

上記のような感じで表示ができました。
適宜変数や名称は変更してください。

解説

カスタム投稿タイプだけの時はget_postsに直接指定していましたが、タクソノミーやタームの指定をする場合、「tax_query」を指定する必要があり、配列で見た目的に別の変数に代入した方がわかりやすいため、今回は変数$argsを作成しています。

この「tax_array」は配列で指定する必要があり、「taxonomy」「field」「terms」を指定します。
タクソノミー、タームはそれぞれ該当する文字列を入力します。
fieldに関しては「タクソノミーをidかslugで選択する」ためにあるのですが、基本slugで設定しておくのが無難です。
これら指定を忘れると表示されずハマるので注意しましょう。僕はこれでハマりました。

get_postsで条件のループが取れれば、あとはforeachでループさせればOKです。

※query_postでも可能ですが、色々な記事を見ると不具合があったり、そもそもメインループを変更させたくない場合はget_postsまたはWP_Queryを使用します。
また、setup_postdata()の変数はグローバル変数$postに設定します。別の変数にしたら動きません。
参考:関数リファレンス/setup postdata

参考にした記事

この記事を書いた人

池田祐太郎

池田祐太郎

WordPress好きの池田です。Webの仕事の前はライブハウスでブッキングや音響をしてました。PHP, JavaScriptを自由に操りたいと思いつつ、つい訪れたサイトのソースコードを見てしまいます。


CONTACTお問い合わせ / お見積もり