web-dev-qa-db-fra.com

Comment savoir si l'option existe mais est vide?

J'utilise quelque chose comme ça sur l'un de mes plugins:

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

Cela fonctionne bien, mais le problème est que je dois pouvoir définir l'option sur "vide", mais lorsque je le fais (à partir d'un textarea sur la page d'option de mon plugin), j'obtiens la valeur par défaut au lieu d'une chaîne vide car get_option ('myOption') renvoie la même chose si ma valeur d'option est vide que si elle n'existe pas.

Alors, comment puis-je savoir si mon option n'existe pas (puis définir $ myOption sur ma valeur par défaut) ou lorsque ma valeur d'option est vide (puis définir $ myOption sur une chaîne vide)?

2
user3007

Fondamentalement, pour distinguer false valeur booléenne et '' chaîne vide, vous devez utiliser un opérateur de comparaison plus strict .

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

Mais il y a plus. Puisque ce que vous voulez est très typique - get_option() peut déjà fournir une valeur par défaut. Donc, votre code peut être simplifié pour:

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

Notez que ceci déterminera correctement la chaîne vide et n'appliquera pas la valeur par défaut dans ce cas.

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