WordPressでテンプレ作る時に分かんなくなってググることが多々あるのですが、ループ関連の記事に対して2つの関数を比較したサイトが多くて、「結局全部でいくつの関数があって、みんなどう使い分けてるの?!」って色々なサイトを見回ることになるので、関数類をまとめてみました。
※2014年8月まとめ
基本のループ(メインループ)って?
メインループは1ページに1つしかないもの。
1つのURLに1つのメインループがある、ということですね。
ブログサイトで言うと、
トップページ(index.php)なら、最新記事の表示
記事ページ(single.php)なら、記事の表示
アーカイブページ(archive.php)なら、2014年8月の投稿記事リスト表示
それ以外はサブループ(カスタムループ)となる。
サイドバーにある、カテゴリー一覧やアーカイブ一覧などがサブループということですね。
メインループのソースコード
[php]
<?php
if ( have_posts() ): //記事がある時
while ( have_posts() ): //記事の数だけ繰り返す
the_post(); //グローバル変数$postに記事情報を入れている
the_title(); //タイトル表示
the_content(); //本文表示
endwhile; //繰り返し終了
else: //記事がない時
endif;
?>
[/php]
ループ関係の関数は4つ!
query_posts関数 [メインループの条件を変更する時]
query_posts()のループ条件をリセットするために、wp_rest_query()の記述が最後に必要。
※グローバル変数$wp_query(メインループの情報が格納される変数)が上書きされるため、上述のリセットが必要。
ひとことで言うと、query_posts() は決して使うべきではありません。
引用:WordPress Codex テンプレートタグ/query_posts
WP Codexさんの強いお言葉により、query_posts()は使わない方向でよろしくお願いします(苦笑)。
pre_get_posts アクションフック [メインループの条件を変更する時]
query_posts()の代わりとして、pre_get_postsを使います。
これはfunctions.phpに記述し、メインループの条件のデフォルト値を変えて表示する、という方法になります。
ループをリセットするための記述は不要です。
get_posts関数 [カスタムループを生成]
メインループとは別で、新たなループを生成します。
ループをリセットするために、wp_reset_postdata()の記述が最後に必要。
※グローバル変数$postが上書きされるため、上述リセットが必要。
WP_Queryクラス [カスタムループを生成]
メインループとは別で、新たなループを生成します。
ループをリセットするために、wp_reset_postdata()の記述が最後に必要。
※グローバル変数$postが上書きされるため、上述リセットが必要。
まとめのまとめ
ループに種類があるのは分かってたけど、調べてるとグローバル変数とかごにゃごにゃ出てきて、結局今回はさらっと、表面だけまとめた感じです(苦笑)。
$wp_queryとか$postとか、違う変数に入るけどthe_title()って関数は変えなくてもそういうもんなの?とか…
WPは奥が深いですねぇ…ε-(‐ω‐;)