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ページ目以降がきちんと表示されます。