query_postsで特定のカテゴリの記事を表示する[WordPressテンプレート作成#12]

20090419_01

トップページにおすすめの記事として特定のカテゴリの記事を表示するということはよくあります。今回はそれを実現してみます。

デフォルトではすべてのカテゴリから管理画面で指定した件数ぶんの記事を取り出すようになっているので、ループ中で特定のカテゴリだけに絞り込む必要があります。この場合、テンプレートタグのquery_posts()を使います。query_posts()はループ中で使い、クエリを変更することができます。

コードは次のようになります。

<?php if ( have_posts() ) : query_posts('cat=4'); ?>
<ul>
<?php while (have_posts()) : the_post(); ?>
<li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
<?php endwhile;?>
</ul>
<?php endif; ?>

これでカテゴリID「4」の記事タイトルをリンクつきで、管理画面で指定した件数ぶん表示します。これをテンプレート(index.php等)内の表示したい箇所に挿入します。

テンプレート内で表示件数を変えるときは引数showpostsに整数を指定します。

query_posts('showposts=5&cat=4')

実際には「特定カテゴリのトピックスを表示する」場合などに使えます。

トピックスを表示したら、その下にその他のカテゴリの記事を複数件ならべることもあると思います。この場合はカテゴリID「4」以外の記事ということになりますね。

新たにループをつくり次のコードを挿入します。

query_posts('showposts=10&cat=-4')

引数catの整数に「-(マイナス)」をつけると「それ以外」という意味になります。このループをquery_posts()なしで行うとトピックス部分と同じクエリになってしまうので注意が必要です。

query_posts()にはcategory__not_inという引数もあって同じことができます。この引数は配列です。category__not_inとほかの引数を同時に指定するには次のように書くと動きました。

query_posts('showposts=5&'.array('category__not_in' => array(4,10)))

そうのひとりごと

© 2017 PAOLOG