get posts&query postsまとめ|トップページでカテゴリ別に投稿数を指定して表示|WordPress

季節はずれの大雪ってどうなの?GWに無事に桜が開花するか心配なフジカワです。

上手くタイトルがつけられない

おかしなタイトルでごめんなさい。タグありきの正引き的にするか、実現することを前にだす逆引き的タイトルにするか悩んだ挙句、中途半端になりました。
さて、WordPressのトップページに
・カテゴリを指定して
・エントリーの表示する数を指定して
・かつ、各カテゴリで、表示するエントリー数は異なる。
というのをやりたかったわけ。
イメージとしてはポータル系ニュース一覧みたいな感じ。
「国内」とか「経済」とか「スポーツ」などのジャンルが「カテゴリー」に相当して、
それぞれのジャンルの表示数をコントロールしたい、と。

調べていくと

実現方法を調べてみると、どうやら大きく分けて2つのタグで実現可能な様子。
・get_posts
・query_posts
のどちらか。

違いをみてみる

結果としては今回に関してはどちらを使っても可能。
ただし、テンプレートタグ/get posts – WordPress Codex 日本語版によると、get_postsでは

様々な理由から、デフォルトでは、記事 ID や the_content() 経由での記事本文といったいくつかのデータが get_posts で取得できません。これは、内部関数 setup_postdata() を $post 配列で呼ぶことにより解決できます。

となっており、ちょっとした細工が必要。

それぞれのタグによる実装例

■表示条件
・カテゴリID=10のエントリーだけを表示
・表示するエントリー数は5件
・「タイトル」、「本文」、「年月日」、「個別ページへのパーマリンク」を表示
■get_postsを使用する場合

<?php $posts = get_posts('numberposts=5&category=10');
foreach($posts as $post) :
setup_postdata($post); ?>
<div class="">
<?php the_title(); ?><!--タイトルを取得-->
<?php the_content(); ?><!--本文を取得-->
<?php the_time('Y年n月j日') ?><!--投稿の年月日を取得-->
<a href="<?php the_permalink() ?>" >詳細を見る</a><!--パーマリンクを取得-->
</div>
<?php endforeach; ?>

div要素内は見栄えを考慮して適切に書き換えてください。
ポイントは「setup_postdata($post);」を忘れないこと。
既出の通り、取得できないデータがあります。
特に、カスタムフィールド系のデータが取得できません(僕、これでハマりました)。

■query postsを使用する場合

<?php if (have_posts()) :  query_posts('posts_per_page=5&cat=10');  ?>
<?php while (have_posts()) : the_post(); ?>
<div class="">
<?php the_title(); ?><!--タイトルを取得-->
<?php the_content(); ?><!--本文を取得-->
<?php the_time('Y年n月j日') ?><!--投稿の年月日を取得-->
<a href="<?php the_permalink() ?>" >詳細を見る</a><!--パーマリンクを取得-->
</div>
<?php endwhile; endif; ?>

こんな感じ。
両方とも、条件の追加をする場合は引数=値の組み合わせを「&」で組み合わせる。
値が複数あるときには「,(カンマ)」で区切って記述。複数のカテゴリを指定する場合などに使用。

引数を微妙に変えるのはやめて欲しい

気になったのは、両方似てる感じだけども、引数が若干違う点。
カテゴリ指定の引数はget_postsが「category=」で、query_postsが「cat=」。
エントリーの表示数も違う。
これ紛らわしい。いっそのこと一緒にしてくれれば間違えなくて便利なんだけどなぁ。

どちらが便利か

実際のところ、慣れたら一緒(笑)。ただし、使える引数(パラメータ)がそれぞれにあるので、
実現したい引数をもった方のタグを使うのが吉、かもしれない。
特にカスタムフィールドを使う場合は最初からquery_postsを使っておくと楽といえば楽かも。
それぞれで使える引数一覧は下のリンクから参照できます。
テンプレートタグ/get posts – WordPress Codex 日本語版
テンプレートタグ/query posts – WordPress Codex 日本語版

コメントいっこ

  1. query_posts で対象データを選択する | Power CMS for WP

    [...] query_posts と get_posts Posted in 03-2. データのエントリーと表示, 03. 投稿とカテゴリーとタグ « パーマリンクの変更 投稿(ポスト)主体のテンプレート » [...]

コメントを残してみる

コメント