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();
?>