Mod de a verifica dacă o opțiune există dar este goală în WordPress

9 feb. 2011, 07:02:05
Vizualizări: 15.1K
Voturi: 4

Folosesc ceva de genul acesta într-unul dintre plugin-urile mele:

$myOption_def = "Valoare implicită myOption";
$myOption = get_option( 'myOption' ) ? get_option( 'myOption' ) : $myOption_def;

Funcționează corect, dar problema este că trebuie să pot seta opțiunea la "goal", iar când fac asta (dintr-un textarea în pagina de setări a plugin-ului), primesc valoarea implicită în loc de un șir gol deoarece get_option('myOption') returnează același lucru atât când valoarea opțiunii este goală, cât și când opțiunea nu există.

Cum pot determina dacă opțiunea mea nu există (și apoi seta $myOption la valoarea implicită) sau dacă valoarea opțiunii este goală (și apoi seta $myOption la un șir gol)?

0
Toate răspunsurile la întrebare 4
1
16

În esență, pentru a distinge între valoarea booleană false și șirul gol '', trebuie să folosești un operator de comparație mai strict.

var_dump( '' == false ); // returnează 'true', deoarece sunt tratate ca două valori 'empty()'

var_dump( '' === false ); // returnează 'false', deoarece valorile sunt ambele 'empty()' DAR de tipuri diferite

Dar este mai mult de spus. Având în vedere că ceea ce dorești este destul de tipic - funcția get_option() poate furniza deja o valoare implicită. Astfel, codul tău poate fi simplificat la:

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

Reține că acest lucru va determina corect șirul gol și nu va aplica valoarea implicită în acest caz.

9 feb. 2011 09:11:18
Comentarii

acesta este singurul răspuns valid, IMHO, sperăm să obținem asta și pentru variabilele de interogare în nucleu.

hakre hakre
9 feb. 2011 17:47:02
0
-1

Puteți verifica dacă este null astfel,

$id = "my_option";

$option_exists = (get_option($id, null) !== null);

if ($option_exists) {
    update_option($id, $value);
} else {
    add_option($id, $value);
}
21 feb. 2014 12:37:42
1
-1
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;
}
26 apr. 2015 05:58:18
Comentarii

Te rog să explici ce face codul tău și cum funcționează

Pieter Goosen Pieter Goosen
26 apr. 2015 08:37:54
1
-2

Oops, rezolvă singur:

$myOption = (get_option( 'myOption' )==FALSE) ? get_option( 'myOption' ) : $myOption_def; 
9 feb. 2011 07:05:22
Comentarii

nu face așa, fă cum a sugerat Rarst: $myOption = get_option( 'myOption', $myOption_def );. Nu este nevoie să reinventezi roata. Funcționalitatea este deja implementată - o valoare implicită pentru orice opțiune. Doar trece-o ca al doilea parametru.

hakre hakre
9 feb. 2011 17:48:13