WORDPRESS

WordPressのthe_post関数を調べていたらデザイナーには到底理解できるレベルではないという確信に至ったお話…

HTML5に続きWordpressネタなので構築畑の人だと思われてしまうかもですが、全くもってデザイナーなのでデザインのお仕事お待ちしております。
さてさて、Wordpressを最近になってようやく触り始めた訳ですが、良く出てくるthe_post();が気になってしまったのでPHPも全く理解していないにも関わらず自分なりにソースコードを解読してみました。

the_postの概要 

ループを次の投稿へ進めます。 次の投稿を取得して、それを「現在の投稿」としてセットアップし、ループの ‘in the loop’ プロパティを true にします。引用元:WORDPRESS Codex日本語版 関数リファレンス/the post

この説明を読んだだけで深く考えなくても別に良いかと思ったのですが、それでは記事にもならないのでギーク気取りでソースコードなんか見てみました。

the_post関数のソースファイル

wp-includes/query.php 800行目付近

function the_post() {
    global $wp_query; // Wp_queryクラスのインスタンス$wp_queryを読み込む
    $wp_query->the_post(); // $wp_queryメンバメソッドのthe_post()を実行
}

wp-includes/query.php 3900行目付近

public function the_post() {
    global $post; // グローバル変数$postを読み込む
    $this->in_the_loop = true;
    /* in_the_loopは初期値がfalse
      ループ中かどうかを判定している
    */

    if ( $this->current_post == -1 ) // current_postは初期値が-1 

        do_action_ref_array( 'loop_start', array( &$this ) );
        // loop_start関数を実行。$thisを配列として参照渡し

    $post = $this->next_post();
    /* next_postの中でcurrent_postの値がインクリメントされる
      postsが持ってる配列からcurrent_postの値がkeyになったものをreturnしてくる
      ローカル変数$postで値を受け取る(つまり現在の投稿という意味か??)
    */

    $this->setup_postdata( $post );
    /* メンバメソッドのsetup_postdata()を実行
      setup_postdataの中で投稿情報を各種のグローバル変数へセット
      setup_postdataの中でセットし終わるとtrueが返ってくるらしい
    */
}

※コード中のコメントは私の解釈を記載したものです。是非自分で解釈をお願いします。

疑問

  1. $thisは$wp_queryを読んだthe_post関数を差しているの?
  2. do_action_ref_arrayでフックされているloop_startのコードはどこにあるのだろうか?
  3. the_postの中でsetup_postdataが返すtrueを受け取る意味は?
  4. そもそもquery.phpというファイルは何なんだ?

と言ったように疑問だらけな訳ですが、結局のところWp_queryクラスを読みとかないと理解できそうもないので今回は諦めて時間をかけてWp_queryクラスの中身を調査していこうかなと思います。ご飯食べながらやるのが丁度良さそうですね。

因みに疑問4についてはファイルの先頭にコメントアウトが記載されていたので内容を読んでみました。

query.phpについて

// wp-includes/query.php 2行目〜12行目

/**
 * WordPress Query API
 *
 * The query API attempts to get which part of WordPress the user is on. It
 * also provides functionality for getting URL query information.
 *
 * @link https://codex.wordpress.org/The_Loop More information on The Loop.
 *
 * @package WordPress
 * @subpackage Query
 */

翻訳

「ワードプレスクエリーAPIは、ワードプレスの部品を取得しようとします。ユーザーがワードプレスを扱う際に。それは機能性も提供もします。URLのクエリー(質問)情報の取得に向けた」

WordPressでクエリー情報を扱えるのはquery.phpが頑張っているからですよ。という事らしいです。

まとめ

もしこの記事を読んでいるあなたが組織に属したデザイナーであり、自身のサイト運用のためではなく案件のためにthe_post関数について調べているのなら、ものすごく時間が必要なのでWordpressのプログラムに長けてる人にお願いをしましょう。
小学生みたいな感想になってしまいましたが自分がやらなくても良いのであればそれに越したことはありません。時間は無限ではないのですし。。