WordPress 出力処理の仕組み
メインクエリ
single.php、category.php等のプラグインページにアクセスした際に、
自動的にデータベースから必要なデータを抽出する処理。
データは
・$wp_query
・$post
・$pages
等へ格納され、
テンプレートタグ等を利用する事で更に必要な項目(タイトル等)を出力できる。
$wp_query
WordPressで自動的に定義されるグローバル変数
single.php、category.php等のプラグインページにアクセスすると自動的にこの変数に記事情報が格納される。
固定ページなら1記事、投稿ページなら複数記事
$post
WordPressで自動的に定義されるグローバル変数
単一の記事データが格納される。
$pages
WordPressで自動的に定義されるグローバル変数
単一の固定ページデータが格納される。
フロー(概要)
プラグインページにアクセス
記事データを取得($wp_queryへ格納)
↓
the_post()等のテンプレートタグを実行
特定記事を取得($post、$pagesへ格納)
↓
the_title()等のテンプレートタグを実行
記事データを出力
フロー(コード)
$wp_query内記事データ全件Loop
<?php while( have_posts() ): ?>
$wp_queryから記事データを取得($post、$pagesへ格納)
<?php the_post(); ?>
記事毎のCSSクラス出力(必須)
<?php the_post_class(); ?>
タイトル
<?php the_title(); ?>
URL
<?php the_permalink(); ?>
投稿日
<?php the_get_the_date(); ?>
記事本文
<?php the_content(); ?>
<?php endwhile; ?>
別ページデータの出力(サブクエリ)
メインクエリが自動的に実行された後、意図的に別ページのデータを出力したい場合に使用
なお、サブクエリ実行時、メインクエリの実行結果(グローバル変数の中身)は自動的に退避されるので、以下の関数によって復元が可能。
・wp_reset_query()
$wp_queryと$postを復元
・wp_reset_postdata()
$postを復元
query_posts
よく使われいた処理方法
上記グローバル変数($wp_query等)を上書きしてしまう為、現在では使用が推奨されていない。
<?php
query_posts(
array(
'post_type' => 'post',
'posts_per_page' => '5'
)
);
?>
<?php
while( have_posts() ):
the_post();
~
endwhile;
グローバル変数の中身を、サブクエリ実行時の状態時から退避しておいた実行前へ戻す
wp_reset_query();
?>
get_posts
上記グローバル変数($wp_query等)を上書きしない。
<?php
$myPosts = get_posts(
array(
'post_type' => 'post',
'posts_per_page' => '5'
)
);
?>
<?php
foreach( $myPosts as $post ):
setup_postdata( $post );
~
endforeach;
グローバル変数の中身を、サブクエリ実行時の状態時から退避しておいた実行前へ戻す
wp_reset_query();
?>
WP_Query
メインクエリ、上記クエリ(get_posts、get_posts)の内部で使用される関数
<?php
$myQuery = new WP_Query(
array(
'post_type' => 'post',
'posts_per_page' => '5'
)
);
?>
<?php
while( myQuery->have_posts() ):
myQuery->the_post();
~
endwhile;
グローバル変数の中身を、サブクエリ実行時の状態時から退避しておいた実行前へ戻す
wp_reset_query();
?>