サポート » テーマ » $postについて

  • 解決済 hirooo

    (@hirooo)


    コード1
    <?php if (have_posts()) : while (have_posts()) : the_post();?>
    <?php $title = $post->post_title; echo($title); ?>
    <?php endwhile; endif; ?>

    コード2
    <?php if (have_posts()) : while (have_posts()) : the_post();?>
    <?php the_title(); ?>
    <?php endwhile; endif; ?>
    $postについて質問します。

    上記コードでは1,2ともWP_Query(グローバル変数$wp_query)のthe_post()メソッドが、
    グローバル変数$postオブジェクトを設定し、ループ内で$postを利用できると理解しています。

    ○質問
    ここで設定される$postはどのようなクラスのインスタンスなのでしょうか。

    コード1のpost_titleは$postのクラスのプロパティだと思いますが、
    コード2のテンプレートタグthe_title()は$postが持っているメソッドと考えてよいのでしょうか。

    WP_Queryのようなリファレンスはありますでしょうか。
    URL http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/WP_Query

    宜しくお願い致します。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • モデレーター jim912

    (@jim912)

    hiroooさん、こんにちは。

    $postはクラスのインスタンスではなく、単なるオブジェクトの変数です。
    オブジェクトになっているのは、wpdbクラスのget_resultsメソッドの返値のデフォルトがオブジェクトになっていることに起因しています。

    ですので、the_title()はクラスメソッドではありませんし(wp-includes/post-template.phpに記述されています。)、リファレンスも存在しません。

    トピック投稿者 hirooo

    (@hirooo)

    jim912様
    ご回答いただきありがとうございます。

    >$postはクラスのインスタンスではなく、単なるオブジェクトの変数です。
    >オブジェクトになっているのは、wpdbクラスのget_resultsメソッドの返値のデフォルトがオブジェクトになっていることに起因しています。

    詳しく説明していただきありがとうございます。

    再度の質問になってしまいますが、
    >上記コードでは1,2ともWP_Query(グローバル変数$wp_query)のthe_post()メソッドが、
    >グローバル変数$postオブジェクトを設定し、ループ内で$postを利用できると理解しています。
    上記の私の認識は正しいでしょうか。

    そして、WP_Queryのthe_post()メソッドが設定する値であるグローバル変数$postはwpdbクラスのget_resultsメソッドの返値であるという理解で良いでしょうか。

    <?php if (have_posts()) : while (have_posts()) : the_post();?>
    <?php $title = $post->post_title; echo($title); ?>
    <?php endwhile; endif; ?>

    <?php if (have_posts()) : while (have_posts()) : the_post();?>

    上記のコードを良く利用するのですが、呪文のように覚えていました。
    ずっと、どのようなことが行われているのかを理解したいと思っています。

    ご回答頂ければ幸いです。

    モデレーター jim912

    (@jim912)

    hiroooさん、こんにちは。

    上記コードでは1,2ともWP_Query(グローバル変数$wp_query)のthe_post()メソッドが、
    >グローバル変数$postオブジェクトを設定し、ループ内で$postを利用できると理解しています。
    上記の私の認識は正しいでしょうか。

    正確には、the_post関数が$wp_qqueryのthe_postメソッドを呼び、the_postメソッドが$postの設定をしているという動作になっています。

    そして、WP_Queryのthe_post()メソッドが設定する値であるグローバル変数$postはwpdbクラスのget_resultsメソッドの返値であるという理解で良いでしょうか。

    正確にはget_resultsメソッドが返す配列の1つが$postとなっている。ということになります。
    $wp_queryのget_postsメソッド内で$wpdb->get_resultsメソッドが実行されます。その結果が$wp_queryのpostsプロパティに格納され、さらにthe_postメソッドから呼ばれるnext_postメソッドがpostsプロパティの1つを返し、これが$postになるわけです。

    トピック投稿者 hirooo

    (@hirooo)

    jim912様
    ご回答いただきありがとうございます。

    正確には、the_post関数が$wp_qqueryのthe_postメソッドを呼び、the_postメソッドが$postの設定をしているという動作になっています。

    正確にはget_resultsメソッドが返す配列の1つが$postとなっている。ということになります。
    $wp_queryのget_postsメソッド内で$wpdb->get_resultsメソッドが実行されます。その結果が$wp_query のpostsプロパティに格納され、さらにthe_postメソッドから呼ばれるnext_postメソッドがpostsプロパティの1つを返し、これが$postになるわけです。

    大変詳しい説明でとても勉強になります。詳しいご説明をいただき、私でもなんとか概要を把握できてきた感じがしております。教えていただいたことを正確に理解するため、さらに勉強していこうと思います。

    本当にありがとうございます。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「$postについて」には新たに返信することはできません。