web-dev-qa-db-ja.com

$ post_typeグローバル変数はどのように機能しますか?

私はarchive.phpとsingle.phpの中にカスタム投稿タイプの名前を出力する必要があります。

私はこのようなものを使うでしょう:

if ( 'staff' == get_post_type() ) {

$post_type = 'staff';

}

echo '<div class="'.$post_type.'">Content</div>';

これは私に<div class="staff">の必要な結果を与えるでしょう

しかし、私は$post_typeと呼ばれるグローバル変数にアクセスし、globalを宣言しなくてもarchive.phpまたはsingle.phpに単純にこれを出力することができるようです。

<div class="<?php echo $post_type; ?>">

コーデックスは、グローバル変数$post_typeはWordpressの管理領域内で使用するためのものであると言います。

私の質問は:

  1. $post_typeが最初にグローバルに宣言しなくても動作するのはなぜですか?
  2. テーマテンプレートで使用するために上記のように$post_typeグローバル変数を使用するのは良い考えですか?

ありがとうございました

1
Dave

グローバルな$post_typeは通常、メインクエリ$wp_queryのパブリッククエリ変数からのものですが、get_post_type()はループ内の現在の$postオブジェクトのpost型です。

だから例えば二次ループこれは異なる場合があります。

$post_typeのデフォルトの投稿タイプはpost投稿タイプであるため、グローバルなWP_Queryが常に設定されるとは限りません。

WP::register_globals()から、post_typeクエリ変数がグローバルにアクセス可能になる方法を見ることができます。

// Extract updated query vars back into global namespace.
foreach ( (array) $wp_query->query_vars as $key => $value ) {
    $GLOBALS[ $key ] = $value;
}

私が最近の回答 をここに投稿したように

前者は通常、デフォルトを含むさまざまなケースを処理するように設計されており、必要に応じて更新されるため、一般的に、私は直接グローバルを使用する代わりにWordPress API呼び出しを使用します。

グローバルと直接協力することで、グローバルを無効にするリスクが高まります。

あなたの目標がいくつかのCSSセレクターをセットアップすることであるなら、body_class()コア関数と共に、<body>タグのために提供されたものを単に使うことができます。ループ内で post_class() コア関数も検討してください。これには既にポストタイプのクラス情報が含まれています。

4
birgire