WordPress ループの基本
2012.03.27
この記事は最終更新日から1年以上が経過しています。
WordPressをカスタマイズする際、キモとなるのがWordPressのループかと思います。
今回はそのWordPressのループに関してまとめてみました。
WordPress ループ
wordpressのループの基礎の記述です。
<?php if (have_posts()) : ?> <?php while (have_posts()) : the_post(); ?> // ループ処理 <?php endwhile; ?> <?php endif; ?>
「該当する記事があるならば、あるだけループしてください。」となります。
このwordpressのループに関してカスタマイズしていきます。
WordPress ループの種類
WordPressのループはメインループとサブループがあります。
メインループは基本、1ページに1回しか登場しないループのことで、サブループとは複数のループを作成する事が出来ます。
メインループを作成(オリジナルのループを元にカスタマイズ)する際、使用するのは、
query_posts()
サブループを作成(オリジナルのループを作成、複数のループを作成。)する際は使用するのは、
WP_Query()
を使用します。
query_posts() メインループ
それでは、メインループをカスタマイズするquery_posts()関数についての使用方法を。
PHP
<?php $args = array( 'category_name' => 'cat-hoge', 'posts_per_page' => 5, ); ?> <?php query_posts( $args ); ?> <?php if (have_posts()) : while (have_posts()) : the_post(); // ループ処理 endwhile; else; // not found endif; wp_reset_query(); //クエリをリセット ?>
とざっと書きましたが、説明を。
$args = arrey();の配列で格納されている情報を指定。
‘category_name’はカテゴリ名、‘post_per_page’は何個記事を表示するか。の指定となります。
query_post( $args );でメインのWordPressループを変更します。
if(have_posts()) : while(have_posts()) : the_post();でループの開始。
「該当する記事があるならば、あるだけループしてください。」となります。
しかし、‘post_per_page’ => 5;としていいますので、最大5回のループとなります。
もっと簡単に記述するなら
<?php query_posts('category_name=hoge-cat,hoge-cat02&showposts=10'); ?> <?php if(have_posts()):while(have_posts()):the_post(); // ループ処理 ?> <?php endwhile;endif; ?>
このように記述することも可能。「,」でカテゴリを複数指定、「&」条件を追加。となります。
WP_Query() サブループ
先ほどはメインループでした。では複数ループを使う場合はどうするかと言うと、WP_Query()を使用します。
<?php $args = array( 'category_name' => 'cat-hoge', 'posts_per_page' => 5, ); ?> <?php $loop = new WP_Query( $args ); if($loop -> have_posts()): while($loop -> have_posts()): $loop -> the_post(); endwhile; else; // not found endif; wp_reset_postdata(); //クエリをリセット ?>
先ほどのメインループと違う点は new WP_Query( $args ); とクエリのリセットで wp_reset_postdata(); です。
ちと分かりやすく記述。
<?php $args = array( 'category_name' => 'cat-hoge', 'posts_per_page' => 5, ); ?> <?php $loop = new WP_Query( $args ); ?> <?php if($loop -> have_posts()): ?> <?php while($loop -> have_posts()): $loop->the_post();?> <?php endwhile; endif; ?> <?php wp_reset_postdata(); ?>
といった感じでしょうか。
query_posts()関数と同様
$loop = new WP_Query( 'category_name=hoge,hogege' );
と記述することも可能です。