スゴク便利な万能タグ「query_posts」ただし…【WPCMS.jp】
テンプレートタグ/query posts - WordPress Codex 日本語版
もともとquery_posts()とは、
<?php // クエリ query_posts( $args ); // ループ if ( have_posts() ) : while ( have_posts() ) : the_post(); .. endwhile; else: .. endif; // クエリをリセット wp_reset_query(); ?>
上記のようにコードを書くことで、指定した記事を表示することの出来る大変すばらしい関数です。
なお、引数$argsには、
$args = array( 'cat' => 3, 'ignore_sticky_posts' => 1, 'post__not_in' => $sticky, 'paged' => $paged ); query_posts( $args );
このような感じで指定することができる。cakephpのfindと少し似ている。
ただし、この関数には罠がある。codexと上記のリンクによると、
WordPress は(ページ番号やカテゴリーのような)URL から得られた引数を無視します。もしその情報が必要なら、query_posts() の引数としてグローバル変数の $query_string を与えます。
と書いてある。
つまりどういうことかというと、「次へ」「前へ」とページを送っても現在のページ数を取得できず、同じ記事(たとえば最初の10件)しか表示されない。
これを避けるためには、こういう風に書きなさい、と。
<?php query_posts($query_string . “&cat=2&order=ASC”); ?>
$argsの部分を文字列にして、各要素の最初に&をつければいいんですね。
上の例を書きかえてみると…
<?php query_posts($query_string . “&cat=3&ignore_sticky_posts=1&post__not_in=" . $sticky . "&paged=" . $paged); ?>
こんな感じになります。