メインクエリとかサブクエリとか、ちょっと古いですが『query_postsを捨てよ、pre_get_postsを使おう【追記あり】【報告あり】』こちらの記事で、一時期わーわーなったのを思い出します。
さて、今回はサブクエリで使うget_posts。
というか、タイトル通りなんですが、ググッていろんなブログ見るのもいいけど、まず最初にきちんとCodexを確認したら、さっさと解決すると思うよ。というお話。
目次
get_postsではまった
WordPressでサブクエリを使うときに、僕がよく書くget_posts。
便利ですよね。いろいろと条件をつけることで、その条件にあった投稿やカスタム投稿なんかを表示することが出来ます。
通常使うときには、『posts_per_page』というパラメータをつけて取得する数を指定してあげるわけですが、なぜかわかりませんが、それを指定しませんでした。
多分、WordPressの表示設定画面にある『1ページに表示する最大投稿数』の数が表示されるもんだと思ってたんじゃないかと。
でも、その表示設定を20件にしているにもかかわらず、get_postsで5件しか表示されない…。
さて、こんな時に人は『get_posts 表示件数 取得できない』とかって検索してしまうわけです。
なぜその時にCodexを見なかったのか…
ちゃんとデフォルトで5件って書いてあるんですよ…
『テンプレートタグ/get posts – WordPress Codex 日本語版』
新着情報を10件取得したい
これを踏まえて、たとえ5件でも『posts_per_page』パラメータをつけるようになりました。
デフォルトと同じものを入れていいのかわかりませんが、自分自身忘れないように。
そこで、僕が書くget_postsを使って、新着情報(newsカテゴリ)を10件取得するコードサンプル。
<?php
$newslist = get_posts(array(
'posts_per_page' => 10,
'category_name' => 'news'
));
?>
<div class="news-head"><h2>お知らせ</h2></div>
<div id="news-body" class="sec-body">
<?php if(!empty($newslist)) :?>
<div class="news-title-list">
<?php
foreach ( $newslist as $post ) :
setup_postdata( $post );
?>
<dl>
<dt><?php the_time('Y.m.d');?></dt>
<dd><a href="<?php the_permalink();?>"><?php the_title();?></a></dd>
</dl>
<?php endforeach;
wp_reset_postdata();
?>
</div>
<?php else:?>
<p id="nopost">お知らせはありません。</p>
<?php endif;?>
</div>
これで10件取得できます。
コピペでいけますよ。
まとめ
コピペでいけますよ。とか書いておいてなんですが、Googleさんにお願いすれば、先人たちのいろんなコードを見て参考にすることができる世の中です。
だからこそ公式ドキュメント的なものは、目を通しておくのが前提条件なんだと改めて思い知らされました。
Codex見ながらやっていけば、だいたいなんとかなるんじゃないかな。
近道として、人のを参考にするってことなんでしょうけどね。
そいぎ~







