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' );
と記述することも可能です。



















