Wie kann ich feststellen, ob $ query_var gesetzt ist?

Ich habe es leid, isset($queryvar) zu benutzen, aber das hat nicht funktioniert, also habe ich meine eigene function qv_isset , aber es läuft ein Problem, wenn $ch auf 0 gesetzt ist.

 $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); } 

Solutions Collecting From Web of "Wie kann ich feststellen, ob $ query_var gesetzt ist?"

Verwenden Sie den Operator für den identischen Vergleich:

 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); } 

Wenn Sie wirklich wissen wollen, ob ein WordPress Query Var gesetzt ist oder nicht, müssen Sie direkt danach suchen.

Alle festgelegten Abfragevariablen werden in einem globalen zugreifbaren Array der WP_Query-class gespeichert.

Es verfügt über eine Standardinstanz, die an die globale Variable $wp_query gebunden ist. In diesem Sinne ist es möglich, eine function qv_isset() zu erstellen, die qv_isset() funktioniert:

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

Was dies so einfach macht ist, dass array_key_exists () wahr oder falsch zurückgibt.

Normalerweise, um eine PHP-Variable zu testen, wenn sie gesetzt ist oder nicht, können Sie isset() . Aber es hat einen Mangel: Wenn eine Variable NULL , wird sie sagen, dass sie nicht gesetzt ist – selbst wenn sie es ist. Vergleichbar mit dem, was auch hier über empty () geschrieben wurde, wird es vergleichbar für '' (leere Zeichenkette), NULL , 0 usw. sagen.

Wie auch immer, wir müssen uns nicht auf diese function verlassen, um zu überprüfen, ob eine Abfragevariable gesetzt wurde oder nicht, da wir array_key_exists () hier verwenden können.


Jetzt für deinen Code:

 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')); 

Oder mit anderen Worten: Wenn Ihre function bereits (so viele) optionale Parameter hat, schauen Sie doch einmal, wie Sie sie am besten füttern können. Nicht gesetzte Variablen sind NULL (wie oben bei isset () angegeben), daher ist es nützlich, sie auch als nicht festgelegte optionale Parameter zu übergeben.

Hallo @imHavoc:

Ich könnte diesen Code so schreiben (obwohl es mehrere gültige Möglichkeiten gibt, ihn zu schreiben):

 $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); } 

Sie sollten leer verwenden , isset ist fehlgeschlagen, weil Sie nur die Variable festgelegt haben. Ein leerer Wert ist immer noch ein Wert.

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