web-dev-qa-db-ja.com

get_query_varとグローバルクエリ変数の関係

私は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()さえ存在しているのでしょうか?

3
John

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(関数)を使用すれば、おそらく安全です。一方、グローバル変数にアクセスすると問題が発生する可能性があります。

4
fuxia