私はfunctions.phpで定義されたクエリ変数を持っています:
add_filter('init', 'add_query_vars');
function add_query_vars() {
global $wp;
$wp->add_query_var('profession');
}
これまでは、ページテンプレート内のクエリvarを取得するために、$profession = get_query_var('profession');
を使用していました。 $paged = get_query_var('paged');
の Codexページ の$paged
変数についても、同様の例のget_query_var()
が示されています。しかし、今日、私はクエリ変数がグローバル変数としてアクセス可能であることを学びました。私がしなければならないのはglobal $profession;
を宣言することだけであり、テンプレート内のどこでも変数の値を使い始めることができます。私には、これはget_query_var()
のネストされた関数のオーバーヘッドなしにクエリvarsにアクセスするためのはるかに良い方法のようです。
グローバル変数としてアクセスするのではなく、get_query_var()
を使用してクエリ変数を取得するのに十分な理由がありますか?そうでなければ、それではなぜget_query_var()
さえ存在しているのでしょうか?
get_query_var()
は$wp_query->get($var);
のラッパーです。しかし、グローバルな$wp_query
は、リクエスト中に設定されたものと必ずしも同じではありません。それが query_posts()
)の主な問題 です。
そして他のプラグインもこれらの変数を意図せずに上書きすることがあります。私はプラグインが$i
をグローバル名前空間に入れているのを見ました…
そして戻り値は異なります。
$GLOBALS['missing_var']
はNULL
です。厳密な型チェックはif ( NULL !== $GLOBALS['missing_var'] )
です。get_query_var('missing_var');
は空の文字列です。厳密な型チェックはif ( '' !== get_query_var('missing_var')
です。他のプログラマがあなたのコードを操作しなければならないとき、彼らはフォールバック値を見るために常にget_query_var()
に従うことができます。グローバル変数では不可能です。
そしてWordPressのグローバル変数の量を減らす計画があります。 API(関数)を使用すれば、おそらく安全です。一方、グローバル変数にアクセスすると問題が発生する可能性があります。