私は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);
}
同一の 比較演算子を使用します。
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);
}
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() について書かれていることと比較して、それは''
(空の文字列)、NULL
、0
などのために同様に言います。
とにかく、ここで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()で上で述べたように)、これはそれらを設定解除されたオプションパラメータとしても渡すのに役立ちます。
こんにちは@ 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);
}
あなたは空を使いたいのですが、変数を設定しただけなのでissetは失敗します。空の値はまだ値です。
if ( empty($cls) && empty($ch) ){
// Not set
}