web-dev-qa-db-ja.com

$ query_varが設定されているかどうかを知る方法は?

私はisset($queryvar)を使うのに疲れましたが、それはうまくいきませんでした、それで私は私自身の関数qv_issetを実行しました、しかしそれは$chが0に設定されるとき問題にぶつかります。

$cls = get_query_var('cls');
$ch = get_query_var('ch');

function qv_isset($var) {
    if($var == '') { return false; 
    } else { return true; }
}

if(qv_isset($cls) && qv_isset($ch)) {
    mcs_textbook_chapter($dialect, $cls, $ch);
} elseif(qv_isset($cls)) {              
    mcs_textbook_chapter($dialect, $cls);
} else {
    mcs_textbook($dialect);
}
1
Evan Yeung

同一の 比較演算子を使用します。

if(get_query_var('cls') !== '' && get_query_var('ch') !== '') {
    mcs_textbook_chapter($dialect, $cls, $ch);
} elseif(get_query_var('cls') !== '') {              
    mcs_textbook_chapter($dialect, $cls);
} else {
    mcs_textbook($dialect);
}
4
onetrickpony

AWordPress Query Varが設定されているかどうかを本当に知りたい場合は、直接確認する必要があります。

すべてのセットクエリ変数は、WP_Queryクラスのグローバルにアクセス可能な配列に格納されます。

グローバルな$wp_query変数にバインドされているデフォルトのインスタンスがあります。それを念頭に置いて、正常に機能しているqv_isset()関数を作成することが可能です。

function qv_isset($var_name) {
    $array = $GLOBALS['wp_query']->query_vars;
    return array_key_exists($var_name, $array);
}

これをとても簡単にするのは、 array_key_exists() がtrueかfalseを返すということです。

通常、設定されているかどうかにかかわらずPHP変数をテストするには、 isset() を使用できます。しかし、それには欠点があります。変数がNULLの場合、それが設定されていなくても設定されていないと表示されます。ここでも empty() について書かれていることと比較して、それは''(空の文字列)、NULL0などのために同様に言います。

とにかく、ここでarray_key_exists()を利用できるので、queryvarが設定されているかどうかを調べるためにその関数に頼る必要はありません。


今すぐあなたのコードのために:

function qv_get($var_name, $default = null) {
    return qv_isset($var_name) ? get_query_var($var_name) : $default;
}

mcs_textbook_chapter($dialect, qv_get('cls'), qv_get('ch'));

あるいは、言い換えれば、もしあなたの関数がすでに(それほど多くの)オプションのパラメータを持っているのなら、どうやってそれを最もよく与えることができるかを見てください。設定解除された変数はNULLです(isset()で上で述べたように)、これはそれらを設定解除されたオプションパラメータとしても渡すのに役立ちます。

4
hakre

こんにちは@ imHavoc:

私はそのようにそのコードを書くかもしれません(それを書くためのいくつかの有効な方法がありますが):

$cls = get_query_var('cls');
$ch =  get_query_var('ch');

if (strlen("{$cls}{$ch}")==0) {
  mcs_textbook($dialect);
} if (strlen($ch)==0) {
  mcs_textbook_chapter($dialect, $cls);
} else {
  mcs_textbook_chapter($dialect, $cls, $ch);
}
3
MikeSchinkel

あなたはを使いたいのですが、変数を設定しただけなのでissetは失敗します。空の値はまだ値です。

if ( empty($cls) && empty($ch) ){
    // Not set
}
2
Backie