Learning site for website creation

21:メインループとサブループ

公開日:2018年11月05日 更新日:2018年11月12日

アクセスしたページの内容があらかじめセットされたループをメインループと呼びます。

サブループはテーマ制作者が任意の条件で表示する為に追加したループのことを指します。

メインループデータの変更

メインループで使用されるデータの内容を変更する際に使用するのが「query_posts();」関数です。ただしメインループの変更は既に取得しているページデータを再取得することになり表示速度が遅くなります。また本来あるはずのメインループデータを上書きするためバグの要因になることも多々あります。基本的には使用しないことをおすすめします。

query_posts( $query );

第1引数(mixed) ループ内で使用するデータの取得条件

※変更したメインループデータをもとに戻す場合は「wp_reset_query();」を使用

条件の記述法

記述例

2行目から6行目で条件指定

7行目でメインループのデータを上書き

15行目でメインループのデータを元のデータに復元

<?php
$args = array(
  'category_name' => '未分類', // カテゴリー名
  'orderby' => 'date', // 日付で並び替え
  'order' => 'ASC', // 降順(古い順)
);
query_posts($args);

if (have_posts()){
  while (have_posts()){
    the_post();
    //記事情報表示
  }
}
wp_reset_query();
?>

サブループの記述法

連想配列で作成した条件を引数にして「new WP_Query($args);」がサブループ用のデータをもったオブジェクトを作成します。

条件の記述法

2行目から6行目で条件指定

7行目で条件に応じたサブループ用データを取得しWP_Queryオブジェクトをインスタンス化「$the_query」変数に代入します。

9行目でサブループデータインスタンスのhave_postsメソッドを呼び出しページデータがあるか確認

10行目でサブループデータインスタンスのhave_postsメソッドを呼び出しページデータがある間繰返し処理

11行目でサブループデータインスタンスのthe_postメソッドを呼び出しグローバル変数$postに1ページ分の情報をセット

15行目でサブループデータによって上書きされた$postをメインループの$postの状態に復元

<?php
$args = array(
  'category_name' => '未分類', // カテゴリー名
  'orderby' => 'date', // 日付で並び替え
  'order' => 'ASC', // 降順(古い順)
);
$the_query = new WP_Query($args);

if($the_query->have_posts()) {
  while($the_query->have_posts()) {
    $the_query->the_post();
    //記事情報表示
  }
}
wp_reset_postdata();
?>

このページで出てくる関数

WordPress関数は「公式サイトのドキュメント」で確認しましょう。

WordPressコンストラクタ

new WP_Query()

WordPressメソッド

WP_Queryインスタンス->have_posts()

WP_Queryインスタンス->the_post()

WordPress関数

query_posts()

have_posts()

the_post()

wp_reset_query()

wp_reset_postdata()

 

欠席者対応:wireframe07

同じタグのコンテンツ