2015/01/19 17:33:22

wordpressで重要なグローバル変数$postの中身の説明

目次(クリックするとジャンプします)
  • 1:wordpressをカスタマイズをしたい
  • 2:wordpressグローバル変数$postとは
  • 2.1:$postが出来るまで
  • 2.2:$postの使い道
  • 3:wordpressグローバル変数$postの中身
  • 3.1:$postの各プロパティの意味・型など
  • 4:まとめ

wordpressをカスタマイズをしたい

wordpressをカスタマイズしているとさまざまな関数や変数やオブジェクトに出くわすことになります。より深くカスタマイズしていくとどうしても用意された関数ではなく、自分でデータを処理したい場面も出てくるでしょう。

その時、自分が処理したいデータがどこにどのように入っているのか、また、どんなデータ構造になっているかを知ることはとても大切なことです。

今回は特に触る事が多いであろうグローバル変数の$postについて説明したいと思います。

wordpressグローバル変数$postとは

$postが出来るまで

$postはループで「今の投稿データ」が格納されるグローバル変数です。通常$postにデータが入る流れは簡単に説明すると以下の様になります。

  • 1.URLからクエリの解析
  • 2.解析したクエリでデータベースから情報を引っ張る
  • 3.$wp_queryにデータベースから得たデータが格納される
  • 4.テンプレートでのループの開始
  • 5.$wp_queryメソッドのhave_posts()で投稿データの有無を判断する
  • 6.記事があった場合、$wp_queryメソッドのthe_post()で$postに「現在の投稿データ」が入る

$postの使い道

$postの使い道はずばり投稿データのカスタマイズにあります。たとえば投稿の中から任意のhtmlタグを抜き出す処理や、ID取得からの他の処理につなげる、リストとシングルページで表示形式を変える為のタイトル加工や日付加工など、考えられる処理は多いです。

$wp_queryにはクエリによって得られたすべての投稿データや状態情報が入るので、非常に膨大で複雑な構造になっています。

たくさんのメソッドが存在しており、$wp_queryを操作することも可能ではありますが、投稿データの為に$wp_queryは扱うのには大きすぎます。

そこで、一つ一つの投稿データを格納する$postの出番です。$postは一つの投稿データ(タイトル、投稿日時、本文など)を格納するので、$wp_queryよりもずっと構造が単純で、格納される情報も少なく扱いやすいです。

投稿データをなんらかの形でカスタマイズする場合は$postを主体にアイデアを練るのがお勧めです。

wordpressグローバル変数$postの中身

$postの各プロパティの意味・型など

以下に$postの各プロパティについてまとめてみましました。いろいろ調べてまとめたが、普段使わない値もあり少し説明に不安なところがあります。できればWordPressCodex等を合わせて参照してもらえればと思います。

パラメータ名 意味 値の型 値の例 値へのアクセス 関係するテンプレートタグ・関数
ID 投稿のID 整数値(int) 189 $post-&gt;ID the_ID()</dd
post_author 投稿の著者 文字列(string) ※著者のIDが入る $post-&gt;post_author the_author(), the_modified_author(), get_modified_author()
post_date 作成日時(日本なら日本標準時) 文字列(string) 2015-01-18 15:49:02 $post-&gt;post_date the_date(), the_time(), get_the_date(), get_post_time()
post_date_gmt 作成日時(グリニッジ標準) 文字列(string) 2015-01-18 6:49:02 $post-&gt;post_date_gmt the_date(), the_time(), get_the_date(), get_post_time()
post_content 投稿本文 文字列(string) ※エディタ等で書かれたhtmlタグを含めた本文がそのまま入っている $post-&gt;post_content the_content(), the_content_rss(), get_the_content
post_title 投稿タイトル 文字列(string) これはタイトルです $post-&gt;post_title the_title(), the_title_rss(), the_title_attribute(), get_the_title()
post_excerpt 投稿の抜粋 文字列(string) ※抜粋に記述された文字列が格納されている $post-&gt;post_excerpt the_excerpt(), the_excerpt_rss(), get_the_excerpt()
post_status 投稿の状態 文字列(string) publish(公開済), future(予約投稿), private(非公開), draft(下書き), Auto-draft(自動下書き), Inherit(メディア、リビジョン等), trash(ゴミ箱) $post-&gt;post_status the_author(), get_the_author()
comment_status コメントの扱い 文字列(string) open(公開), colse(非公開) $post-&gt;comment_status 特になし
ping_status ピンバックの扱い 文字列(string) open(公開), colse(非公開) $post-&gt;ping_status 特になし
post_password 投稿のパスワード(設定している場合のみ) 文字列(string) ※英数字のみ使用可 $post-&gt;post_password post_password_required()
post_name 投稿のスラッグ名 文字列(string) car-sport-about $post-&gt;post_name get_page()※ver3.5.0から非推奨
to_ping ping送信先 文字列(string) ※ping送信先のURLが入る $post-&gt;to_ping 特になし
pinged トラックバック送信先(履歴) 文字列(string) ※トラックバック送信先のURLが入る $post-&gt;pinged 特になし
post_modified 更新日時(日本なら日本標準時) 文字列(string) 2015-01-18 15:49:32 $post-&gt;post_modified the_modified_date(), the_modified_time()
post_modified_gmt 更新日時(グリニッジ標準) 2015-01-18 15:49:32 $post-&gt;post_modified_gmt the_modified_date(), the_modified_time()
post_content_filtered フィルター処理後の投稿本文(等) ※フィルターでの処理結果をキャッシュする目的等で使われるフィールド ※どちらかというと開発寄りのパラメータ $post-&gt;post_content_filtered 特になし
post_parent 親投稿のID 整数値(int) ※親投稿のIDが入る $post-&gt;post_parent 特になし
guid 投稿のURL 文字列(string) http://hoge.jp?p=100 ※パーマリンク設定でのURLではなく?p=形式のデフォルトURLが入る $post-&gt;guid the_permalink(), get_permalink(), get_post_permalink(), get_page_link()
menu_order 表示順のオーダー 整数値(int) ※固定ページのパラメータ「順序」にて設定した数字 $post-&gt;menu_order 特になし
post_type 投稿の形式 文字列(string) post(投稿), page(固定ページ), revision(更新記録), Attachment(添付) $post-&gt;post_type register_post_type()
post_mime_type 投稿形式がAttachmentの場合のMIME形式 文字列(string) image/png, image/jpeg, image/gif等 $post-&gt;post_mime_type 特になし
comment_count コメント数 文字列(string) ※ピンバックとコメントの合計数になるとのこと $post-&gt;comment_count comments_number()
filter サニタイズの形式 文字列(string) raw(数値フィールドの値をサニタイズ), edit(各種フィルターフックでサニタイズ), db(各種フィルターフックでサニタイズ), display(各種フィルターフックでサニタイズ), attribute(各種フィルターフック後にesc_attr()でサニタイズ), js(各種フィルターフックの後にesc_js()サニタイズ) $post-&gt;filter esc_attr()

$postの中身を見てみたい人はvar_dump()かprint_r()を使いましょう。

@MINOはvar_dump()派。print_r()よりも情報が詳細だ(データの型なども表示される)。見た目も<pre>タグで囲ってしまえば、そこそこきれいですが、やはりちょっと見難いです。

var_dump()した場合はページソースを直接確認する方が読みやすいです。確認にはページソース閲覧をお勧めします。

以下のようにループ内でvar_dumpを記述してあげれば、ループで得られる投稿の情報がズラズラと表示されるはずです。

<?php if (have_posts()) : ?>	
    <?php while (have_posts()) : the_post(); ?>
        <pre><?php var_dump($post); ?></pre>
        <!--なんらかのhtml-->
    <?php endwhile; ?>
<?php endif; ?>

まとめ

wordpressカスタマイズの一歩は$postからなどともいわれるように[誰によって?]、最初に手を付けるにはうってつけな難易度だと思っています。

$postをうまくハンドリングできるようになると、投稿データをいかようにも扱うことができ、見せ方をいろいろ工夫することができます。 もちろんjavascript等と連携すれば、かなり高度な処理にも通じるはずです。

wordpressを使い倒してやろうないでしょうか。