Hatena::ブログ(Diary)

minorio のプログラミング・メモ

RSS2

2008-09-10

[][] query_posts() でページ分割を機能させる方法 18:07

すごく便利なタグが「query_posts」。

このタグをループの直前に置いて、引数にカテゴリ、投稿者、時期、昇順/降順、件数など指定するとその条件に該当する記事が取得され、その後のループのフォーマットに沿って、件数分表示される。

しかし、該当件数が例えば50件など大量にある場合は10件×5ページに分割したいが、引数をただ設定しただけでは「次のページへ」と分割できない。

それは「query_post」というタグが、今は何ページ目を表示しているのか、またそのページがどのカテゴリを表示しているのか、といったURLから得られる情報を無視してしまうためのようです。だから次へ次へとページを送っても現在のページ数を取得できず、同じ記事(例では最初の10件)しか表示されない。

 

その場合「$query_string」のひと言を、引数の先頭に加え、続く引数「&」で始める。

■書式

query_posts($query_string . "&order=ASC&cat=2&...")

テンプレートの記述例

<?php query_posts($query_string . "&cat=2&order=ASC"); ?>

<?php if(have_posts()) : while (have_posts()) : the_post(); ?>

<div class="post">

<h3 class="storytitle" id="post-<?php the_ID(); ?>">

<a href="<?php the_permalink() ?>" rel="bookmark">

<?php the_title(); ?>

</a>

</h3>

<?php the_content(__('(more...)')); ?>

</div>

<?php endwhile; else: ?>

<p>該当する記事はありません。</p>

<?php endif; ?>

これで該当記事がたくさんある場合に「次のページへ」が機能します。

いつものループに、最初のたった1行を加えるだけで自由自在に記事を呼び出せます。

スゴク便利な万能タグ「query_posts」ただし… | WordPressカスタマイズメモ【企業ホームページ制作方法】

追記(2008.12.01)>

ループのあとに、wp_reset_query() を付けた方がいいみたい。

重要なのはループの前のquery_postsとループの後のwp_reset_query()。

query_postsを使う場合wp_reset_query()を最後につけないとqueryの指定が後のループに引き継がれる。

[WP
トラックバック - http://d.hatena.ne.jp/minorio/20080910/1221037626
Connection: close