WordPressのメインループ メインクエリ WordPressクエリ $wp_query

スポンサードリンク

スポンサードリンク

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 Codex-$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はスーパーグローバル変数。

参照:wp-settings.php

<?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=”) 固定ページか判断

 

WordPressのテンプレートはコチラ>>

スポンサードリンク

スポンサードリンク