WordPressはループを使いコンテンツ部分を作成する。
メインループ
メインクエリ = WordPressクエリ(別称) = $wp_query(メインクエリを格納した配列)
WP_Queryクラス
メインループとは
メインループは、メインクエリを使用したループ処理。
メインループはテンプレートに記述する。
※メインクエリの内容はURLの内容で決定される。
メインループによりテンプレートファイルが出力される仕組み
参照:WordPress Codex ループ
※テンプレートファイルはループを使い出力される。
①https://nawate.jp/?cat=1にアクセス
②WordPressがパラメータ(?cat=1)に準じたテンプレートをテンプレート階層に従って選択する。。
③WordPressがテンプレートに準じたデータをデータベースに要求し検索する。
④WordPressは自動的にデータベースを検索して取得したメインクエリを$wp_queryに保存する。
※カテゴリーページの場合はパラメータのカテゴリーに属する全ての投稿データが保存される。
⑤選ばれたテンプレートに記載されているループのスクリプトに従い$wp_queryからデータを取り出す。
⑤全部データを$wp_queryから取り出したら$wp_query内にデータが無くなる。
⑥have_posts()はfasleを返すのでループは終了する。
メインループの基本構文
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> コンテンツ <?php endwhile; endif; ?>
have_posts()の働き
表示するデータが$wp_queryに存在していればtrueなければfalse。
while文中では存在する投稿数分の回数がループする。
※個別ページなど記事の情報が1件の場合には1回しかループしない。
$wp_queryのプロパティ$current_postと$post_countを使って処理。
$current_postプロパティ:
表示されようとしている投稿の数が格納されている。
$post_countプロパティ:
表示される投稿の数が格納されている。
the_post()の働き
$wp_queryから1投稿分の投稿データを順に取り出す。
取り出した1件分の投稿データを$postに保存する。
$current_postプロパティの値を1増やす。
$postとは
$wp_queryのプロパティ
$postは$wp_queryから現在の投稿データを1つ取り出したWP_Postオブジェクトが格納されている。
print_r($post)をすると
WP_Post object(
[ID] => 1
[post_autor]=>1
…..省略…………….
)
the_title()の働き
タイトルの表示。
※ループ内で使用するのが前提のテンプレートタグ。
メインクエリ WordPressクエリ $wp_query とは
メインクエリ = WordPressクエリ = $wp_query
クエリとは
データベースに問合せをすること。
つまり、データベースに処理を要求すること。
メインクエリ・WordPressクエリとは
※URLの内容でメインクエリの内容は決定される。
①ユーザーがリクエスト(検索)する。
↓
②WordPressがURLのパラメータに従って自動的にテンプレートを選択する。
↓
③次にWordPressが自動的に、データベースにクエリを発行し、その結果データベースから取得したデータをメインクエリ(WordPressクエリ)という。
テンプレートのURL・パラメータ
ドメイン (例:https://nawate.jp) より下のURL |
表示されるテンプレート | 概要 |
---|---|---|
/ | front-page.php home.php |
トップページ |
/?p=1 | single.php | 指定したIDの投稿 |
/?page_id=1 | page.php | 指定したIDの固定ページ |
/?cat=1 | category.php | 指定したIDのカテゴリーページ |
$wp_queryとは
$wp_queryは、メインクエリを格納した配列。
$wp_queryはWP_Queryクラスのインスタンス(オブジェクト)。
$wp_queryはスーパーグローバル変数。
<?php //wp-settings.phpより抜粋 /** * WordPress Query object * * @global WP_Query $wp_the_query WordPress Query object. * @since 2.0.0 */ $GLOBALS['wp_the_query'] = new WP_Query(); /** * Holds the reference to @see $wp_the_query * Use this global for WordPress queries * * @global WP_Query $wp_query WordPress Query object. * @since 1.5.0 */ $GLOBALS['wp_query'] = $GLOBALS['wp_the_query']; ?>
WP_Queryクラス WP_Queryオブジェクト
参照:wp-includes/class-wp-query.php
WP_Queryオブジェクトを定義したもの。
↓
WP_Queryクラス
$wp_queryはWP_Queryクラスのインスタンス。
WP_Queryのクエリフラグ
ユーザーが検索したURLがどのページへの問合せか判断する。
・タグやカテゴリーなのどのアーカイブ系の検索。
・投稿系の検索。
それによって必要な情報を$wp_queryに格納する。
クエリフラグを識別するメソッド
WP_Queryクラスで定義されている。
メソッド | 概要 |
---|---|
アーカイブページ系 | |
is_archive() | アーカイブか判断 |
is_category($cat=”) | |
個別ページ | |
is_singular($post_types=”) | 個別ページか判断 |
個別ページ系-個別投稿ページ | |
is_single($post=”) | 個別投稿ページか判断 |
個別ページ系-固定ページ | |
is_page($page=”) | 固定ページか判断 |