Come verificare se un'opzione esiste ma è vuota in WordPress?
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)?

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.

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

/**
* 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;
}

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.
