Come verificare se un'opzione esiste ma è vuota in WordPress?

9 feb 2011, 07:02:05
Visualizzazioni: 15.1K
Voti: 4

Sto utilizzando qualcosa di simile in uno dei miei plugin:

$myOption_def = "Valore predefinito di myOption";
$myOption = get_option( 'myOption' ) ? get_option( 'myOption' ) : $myOption_def;

Funziona bene, ma il problema è che ho bisogno di poter impostare l'opzione come "vuota", ma quando lo faccio (da un textarea nella pagina delle opzioni del mio plugin), ottengo il valore predefinito invece di una stringa vuota perché get_option( 'myOption' ) restituisce lo stesso risultato sia quando il valore dell'opzione è vuoto sia quando non esiste.

Quindi come posso capire quando la mia opzione non esiste (e quindi impostare $myOption al valore predefinito), o quando il valore dell'opzione è vuoto (e quindi impostare $myOption a una stringa vuota)?

0
Tutte le risposte alla domanda 4
1
16

Fondamentalmente, per distinguere tra il valore booleano false e la stringa vuota '' devi utilizzare un operatore di confronto più rigoroso.

var_dump( '' == false ); // questo è 'true', trattati come due valori 'empty()'

var_dump( '' === false ); // questo è 'false', perché i valori sono entrambi 'empty()' MA di tipo diverso

Ma c'è di più. Poiché quello che vuoi fare è molto tipico - get_option() può già fornire un valore predefinito da solo. Quindi il tuo codice può essere semplificato in:

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

Nota che questo determinerà correttamente la stringa vuota e non applicherà il valore predefinito in quel caso.

9 feb 2011 09:11:18
Commenti

questa è l'unica risposta valida secondo me, spero che lo avremo anche per le query vars nel core.

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

Puoi verificare se è null in questo modo,

$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
/**
 * Verifica se un'opzione esiste nel database di WordPress
 * @param string $option_name Nome dell'opzione da verificare
 * @return bool Restituisce true se l'opzione esiste, false altrimenti
 */
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
Commenti

Per favore, spiega cosa fa il tuo codice e come funziona

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

Ops, risolvo da solo:

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

non farlo così, fai invece quello che Rarst ha suggerito: $myOption = get_option( 'myOption', $myOption_def );. Non c'è bisogno di reinventare la ruota. È già tutto lì, un valore predefinito per qualsiasi opzione. Basta passarlo come secondo parametro.

hakre hakre
9 feb 2011 17:48:13