WordPressで特定のタグを持つ記事のみ表示したい
以前、特定のカテゴリを持つ記事一覧を取得する方法を紹介しました。
>> WordPressで特定カテゴリの新着記事を表示する方法
カテゴリ同様、WordPressで特定のタグをもつ記事のみ取得したい場合は記事を取得する関数にタグパラメーターを渡します。
今回も get_posts/WP_Query/query_posts 3種類それぞれの取得方法を紹介します。
その前に…WordPressの記事取得方法3種類まとめ
記事の取得方法を軽くおさらいします。WordPressでは記事の取得方法が3つありますので、ケースにあった関数を使いましょう。
query_posts | そのページでの記事の検索条件(メインクエリと呼びます)を変更するタイプ |
---|---|
get_posts | メインクエリは弄らずに新たな検索条件(カスタムクエリ)を作る |
WP_Query | メインクエリは弄らずに新たな検索条件(カスタムクエリ)を作る |
メインクエリというのは、そのページで設定されている記事の取得条件のことです。アーカイブページなど、テーマ側で何も設定していなくてもWPが自動で作ってくれています。
フロントページ(index.php)であれば最新記事を数件取得、カテゴリページ(category.php)なら特定カテゴリを数件取得、月別アーカイブページ(archive.php)ならxxxx年xx月の記事を数件取得…といった感じです。
WordPress本体が定めている条件ですので、むやみに変えると思わぬ問題が起きることもあるのでなるべくはカスタムクエリ…新たに検索条件を作ったほうが安全です。
そういった理由で query_posts は非推奨
です。
もし使う際は、必ず終わりにクエリリセットをお忘れなく!
>> 記事が表示されない!?WordPressの記事ループ後にやっておくべきこと
WordPressで特定タグの記事をget_posts/WP_Query/query_postsで取得する方法
それでは get_posts/WP_Query/query_posts を使ったタグ別記事取得方法を紹介します。
条件は3種とも以下のもので共通です。
<?php // IDが3 のタグを持つ記事を取得する $args = ['tag_id' => '3']; // IDが3か4 のタグのどちらかを持つ記事を取得する $args = ['tag__in' => [3, 4]]; // IDが5か6 のタグのどちらかを持たない記事を取得する $args = ['tag__not_in' => [5, 6]]; // IDが7と8 のタグを両方持つ記事を取得する $args = ['tag__and' => [7, 8]]; // スラッグが「wp」 のタグを持つ記事を取得する $args = ['tag' => 'wp']; // スラッグが「php」「css」 どちらかのタグを持つ記事を取得する $args = ['tag_slug__in' => ['php', 'css']]; // スラッグが「plugin」「theme」 両方のタグを持つ記事を取得する $args = ['tag_slug__and' => ['plugin', 'theme']]; ?>
get_posts で記事を取得する
<ul> <?php // 条件を渡して記事を取得 $custom_posts = get_posts($args); foreach ( $custom_posts as $post ): setup_postdata($post); ?> <li><?php the_time('Y/m/d') ?> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php endforeach; ?> </ul>
WP_Query で記事を取得する
<ul> <?php // 条件を渡して記事を取得 $custom_posts = new WP_Query($args); while ( $custom_posts->have_posts() ) : $the_query->the_post(); ?> <li><?php the_time('Y/m/d') ?> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php endwhile; ?> </ul>
query_posts で記事を取得する(非推奨)
あまり推奨されませんがこちらも紹介します。
パラメーターを渡して記事を表示したあとは必ずリセットを忘れずに!
<ul> <?php // 条件を渡して記事を取得 $custom_posts = query_posts($args); foreach ( $custom_posts as $post ): setup_postdata($post); ?> <li><?php the_time('Y/m/d') ?> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php endforeach; ?> </ul> <?php // 必ずクエリをリセット wp_reset_query(); ?>