ループにget_postsを使う@WordPress
WordPressのループで表示の条件を指定する際には「query_posts()」を使うことが多いですが、これは非推奨とされていることを最近知ったので、代わりに「get_posts()」を使うようにします。
query_posts を使うことによって、ページ上のメインクエリーが置き換えられ、ページの読み込み速度に影響を与えることに留意してください。最悪の場合、倍かそれ以上の処理が発生します。簡単に使える代わりに、この関数は混乱と問題を引き起こす傾向があります。下記の注意をご覧ください。
一般的な投稿の取得には、WP_Query または get_posts を使ってください。
テンプレートタグ/query posts - WordPress Codex 日本語版
基本のループ
基本のループは以下のような記述になりますが、これだけだと表示件数やカテゴリの指定等、表示条件を細かく指定できません。
<?php if (have_posts()) : while (have_posts()) : the_post(); ?> <h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2> <div class="post"><?php the_content(); ?></div> <?php endwhile; ?> <?php else: ?> <h2>記事がありません</h2> <?php endif; ?>
query_posts()を使った場合
query_posts()を使うと、以下のような記述を加えることで表示件数等、表示条件を複数指定することができます。そして、これまでは多くの場合これを使っていました。(同一テンプレート内で複数ループを設置する場合、サブループを使用する場合を除いて)
実際、検索するとヒットするWordPressのループの制御に関してはquery_posts()で解説されているものがずっと多い気がします。
<?php query_posts('cat=1&posts_per_page=10'); / * カテゴリIDに1を指定し、表示件数は10件と指定 */ ?> <?php if (have_posts()) : while (have_posts()) : the_post(); ?> <h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2> <div class="post"><?php the_content(); ?></div> <?php endwhile; ?> <?php else: ?> <h2>記事がありません</h2> <?php endif; ?>
get_posts()を使って書き換える
get_posts()を使うとこのようになります。配列にパラメータを記述することでループの表示条件を細かくコントロールできます。
<?php $args = array( 'posts_per_page' => 6, 'order'=> 'DESC', // ソート(降順:新しいものから古いものへ) 'category' => 2, // カテゴリーの指定(カテゴリIDを指定、除外の場合にはカテゴリIDに「-」をつける、複数の場合にはカンマでつなげる ); $myposts = get_posts( $args ); foreach ( $myposts as $post ) : setup_postdata( $post ); ?> <div class="post"> <h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2> <ul class="optional"> <li class="date">Published: <?php echo get_post_time('M jS, Y'); ?></li> <li class="category">Category: <?php the_category(', '); ?></li> <?php if(has_tag() == true) : ?> <li class="tags">Tags: <?php the_tags('', ', ', ''); ?></li> <?php else : ?> <?php endif; ?> </ul> <!-- / .post --></div> <?php endforeach; wp_reset_postdata();?>
この記述例では表示件数、ソートの順序、カテゴリーの指定(または除外)がされていますが、その他にも以下のようなパラメータがあります。
デフォルトの使い方(Codex日本語版より)
<?php $args = array( 'posts_per_page' => 5, 'offset' => 0, 'category' => '', 'category_name' => '', 'orderby' => 'date', 'order' => 'DESC', 'include' => '', 'exclude' => '', 'meta_key' => '', 'meta_value' => '', 'post_type' => 'post', 'post_mime_type' => '', 'post_parent' => '', 'author' => '', 'post_status' => 'publish', 'suppress_filters' => true ); $posts_array = get_posts( $args ); ?>
パラメータの詳しい解説はパラメータ - 関数リファレンス/WP Queryにありますので、必要なときに確認するといいでしょう。
本格ビジネスサイトを作りながら学ぶ WordPressの教科書 Ver.4.x対応版
- 作者: プライム・ストラテジー株式会社
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2015/02/21
- メディア: 大型本
- この商品を含むブログ (3件) を見る