webentwicklung-frage-antwort-db.com.de

Wie finde ich heraus, ob die Option existiert, aber leer ist?

Ich verwende so etwas für eines meiner Plugins:

$myOption_def = "myOption Default Value";
$myOption = get_option( 'myOption' ) ? get_option( 'myOption' ) : $myOption_def;

Das funktioniert gut, aber das Problem ist, dass ich in der Lage sein muss, die Option auf "leer" zu setzen, aber wenn ich das tue (aus einem Textbereich auf der Optionsseite meines Plugins), erhalte ich den Standardwert anstelle eines leeren Strings, weil get_option ('myOption') gibt dasselbe zurück, wenn mein Optionswert leer ist, als wenn er nicht existiert.

Wie kann ich also herausfinden, wann meine Option nicht existiert (und dann $ myOption auf meinen Standardwert setzen) oder wann mein Optionswert leer ist (und dann $ myOption auf einen leeren String setzen)?

2
user3007

Grundsätzlich müssen Sie zur Unterscheidung zwischen false boolean value und '' empty string den strengeren Vergleichsoperator verwenden.

var_dump( '' == false ); // this is 'true', treated like two 'empty()' values

var_dump( '' === false ); // this is 'false', because values are both 'empty()' BUT of different type

Aber es gibt noch mehr. Da das, was Sie wollen, sehr typisch ist - get_option() kann bereits einen eigenen Standardwert liefern. So kann Ihr Code vereinfacht werden:

$myOption = get_option( 'myOption', $myOption_def );

Beachten Sie, dass dies eine leere Zeichenfolge korrekt ermittelt und in diesem Fall den Standardwert nicht anwendet.

13
Rarst
function optionExists($option_name) {
    global $wpdb;
    $row = $wpdb->get_row($wpdb->prepare("SELECT option_value FROM $wpdb->options WHERE option_name = %s LIMIT 1", $option_name));
    if (is_object($row)) {
        return true;
    }
    return false;
}
0
AI.Takeuchi