21:メインループとサブループ
アクセスしたページの内容があらかじめセットされたループをメインループと呼びます。
サブループはテーマ制作者が任意の条件で表示する為に追加したループのことを指します。
メインループデータの変更
メインループで使用されるデータの内容を変更する際に使用するのが「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