wordpressでquery_postsを使って投稿記事を分ける方法

wordpressで、投稿記事を表示させるときは、

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

というwordpressループを使います。
記事の表示と使えるデータはテンプレートによってきまっています。

トップページ→最新の記事とそれに関するデータ
カテゴリー別ページ→カテゴリーに属する記事とそれに関するデータ
月別ページ→その月に投稿された記事とそれに関するデータ
記事の個別ページ→その記事のみとそれに関するデータ
PAGE→PAGEに関するデータ

しかし、カテゴリ別、タグ別、日付順などテンプレートに依存せずに記事を分けたい時があります。
wp_queryオブジェクトを使って行うこともできますが、今回は、query_postsを使って投稿記事を分けます。

○書き方

<?php query_posts('取得するデータ'); ?>
<?php if(have_posts()): ?>
<?php while(have_posts()): the_post();?> 
<h2><a href="<?php the_permalink(); ?>">
<?php the_title(); ?></a></h2>
<div><p><?php the_content(); ?></p>
 <p><?php the_category(); ?></p></div>
<?php endwhile; ?>
<?php else: ?>
<p>投稿されたものがありません。</p>
<?php endif; ?>

wp_queryより書き方は簡単でwordpressループの前に書くだけです。

○取得できるパラメータ

○特定の記事に関する記事・データ→p=記事ID or name=記事のスラッグ
○特定のPAGEに関する記事・データ→page_id=PAGEのID or pagename=PAGEのスラッグ
○特定のカテゴリに関する記事・データ→cat=カテゴリID or category_name=カテゴリのスラッグ
○特定のタグを入れている記事・データ→tag=タグの名前 or tag_id=タグのID
○特定の日付の記事・データ→year=年、monthnum=月、day=日
○特定のユーザーが投稿した記事→author_name=ユーザー名、author=ユーザーID
○取得する記事やPAGEの数→posts_per_page=数
○何番目より後の記事を取得するか(最新を飛ばしたり)→offset=数
○昇順か降順かの指定→order=ASC or DESC
○昇順か降順かの基準の指定→orderby=date,modified,category,title など
○投稿?PAGE?などのタイプで取得→post_type=post,page.attachment など
○カスタムフィールドでの指定により取得→meta_key=指定したキー
○カスタムフィールドでの指定による値で取得→meta_value=値

このパラメータを使って取得します。

○例

①2011年2月に投稿された記事でwordpressのカテゴリに含まれる投稿記事を取得

<?php query_posts('category_name=wordpress&year=2011&monthnum=2');?>

②お気に入りのタグを入れていてる投稿記事を5個取得

<?php query_posts('tag="お気に入り"&posts_per_page=5'); ?>

③カテゴリーページで投稿記事を5個取得

<?php query_posts($query_string.'&posts_per_page=5'); ?>

$query_stringを入れるとその決まっているテンプレートの標準のデータが出力されます。
この場合だとカテゴリーの投稿記事とデータになります。

query_postsでの記事ページを分けるとき

query_postsでページを分けるとき、同じ記事が出てしまいエラーがでることがあります。
そのために使うのがget_query_var();
getで飛んでくるデータを得ることにより、ページ数を把握してきちんとしたページを表示させます。
例えば、
http://www.geekzshu.com/?paged=2
pagedのgetのデータを得るなら

<?php get_query_var('paged'); ?>

例で行くとget_query_var(‘paged’) = 2の値を得ます。
これを使い、
例①2011年2月に投稿された記事でwordpressのカテゴリに含まれる投稿記事を取得
を複数ページで表示させるなら

<?php get_query_var('paged'); ?>
<?php query_posts('category_name=wordpress&year=2011&monthnum=2&paged='.$paged);?>

で2ページ目以降がきちんと表示されます。


コメントする