最近触る時間が全然無いですがWordPress
の話。カスタムタクソノミーで作った任意
のタームに属する記事の一覧を、表示数を
指定して表示するコードです。個人的には
かなり使う機会の多いコードですので自分
のメモ的な記事になります。
久々のWPネタです。カスタムタクソノミーで作成したターム(タグとかカテゴリの事です)に属する記事の一覧を、20件とか30件みたいに、表示するを指定出来るコードです。
意味分からんという方は過去記事をご参照下さい ↓
jQuery スニペットというサブコンテンツを作成したときのおさらいです。ではコードです
コード
<?php $tax_posts = get_posts('post_type=foo&taxonomy=bar&term=hoge&posts_per_page=3'); if($tax_posts): ?> <ul> <?php foreach($tax_posts as $tax_post): ?> <li><a href="<?php echo get_permalink($tax_post->ID); ?>"><?php echo esc_html($tax_post->post_title); ?></a></li> <?php endforeach; ?> </ul> <?php endif; ?>
リストになってますけどお好みで適当に変えてください。get_postsで取得します。
解説的なもの
get_posts('post_type=投稿タイプ名&taxonomy=タクソノミー名&term=ターム名&posts_per_page=3');
複数ループを作成する時はget_postsを使います。get_postsは出された条件で検索し、マッチしたデータを取得する関数です。デフォルトでは5件表示しますが、posts_per_pageで件数を変更できます。
ターム名はスラッグです。先ほどのコードは
fooという投稿タイプに属するbarというカスタムタクソノミーで作成したhogeというタームに属する記事を3件表示する
というコードになります。
蛇足ですが、get_postsは更に「アルファベット順にタイトルを並べたいの!」みたいなワガママガール特有の突発的な仕様変更も難なく叶えてくれます。
posts_per_page=3&order=ASC&orderby=title
とても便利ですね。思わずヒャッハー!と言いたくなります。
get_postの使用例はCODEXがなかなか充実してますのでここを見れば十分じゃないでしょうか。
query_posts関数も同じような感じなんですが、query_postsはメインループだけを変更するためのものなので、マルチループとして処理する際はget_postを使うようにしてください。そうしないとヒデブになります。
記事の所属タームを判別して一覧化する
single-***.phpみたいな記事ページで、記事に属するタームを判別して一覧化したい、みたいなとき。レコメンド作りたい、とかそんな感じの時はget_the_termsを併用します。
<?php $term = array_shift(get_the_terms($post->ID, 'bar')); ?> <?php $tax_posts = get_posts('post_type=foo&posts_per_page=3&taxonomy=bar&term='.esc_html($term->slug)); if($tax_posts): ?> <ul> <?php foreach($tax_posts as $tax_post): ?> <?php if ($post->ID != $tax_post->ID): ?> <li><a href="<?php echo get_permalink($tax_post->ID); ?>"><?php echo esc_html($tax_post->post_title); ?></a></li> <?php else: ?> <li><?php echo esc_html($tax_post->post_title); ?></li> <?php endif; ?> <?php endforeach; ?> </ul> <?php endif; ?>
これも以前書いた記事(冒頭のです)に書いてあります。以下が実装結果です。
これを使えば、WordPressでディレクトリ型のポータルサイトサイトや、多数カテゴリのある巨大ニュースサイトの構築なんかも余裕で可能になります。※個人差が有ります
想像しただけで興奮してきますね( ゚∀゚)o彡゚