私がカスタムのquery_varsを追加すると、global
やget_query_var()
のようなアクセサを必要とせずにどこでも利用できるようになります。
// if your url contains the var http://example.com?document_id=99
// and you add it to $query_vars...
<?php
function filter__query_vars( $query_vars ) {
$query_vars[] = 'document_id';
return $query_vars;
}
add_filter( 'query_vars', 'filter__query_vars' );
// you can reference it anywhere.
/* single.php */
<?php
echo $document_id; // outputs 99. wtf?
なぜこれが機能するのですか?
WP::parse_request()
メソッド( src )内で、query_vars
フィルターを見つけます。
$this->public_query_vars = apply_filters( 'query_vars', $this->public_query_vars );
そしてWP::register_globals()
の中に なぜ があるのか分かるでしょう(それはグローバルにアクセス可能になります( src ):
// Extract updated query vars back into global namespace.
foreach ( (array) $wp_query->query_vars as $key => $value ) {
$GLOBALS[ $key ] = $value;
}
グローバル$Wp_query
には、グローバル$wp
オブジェクトからのクエリ変数が供給されています。