Cómo verificar si una opción existe pero está vacía

9 feb 2011, 07:02:05
Vistas: 15.1K
Votos: 4

Estoy usando algo como esto en uno de mis plugins:

$myOption_def = "Valor por defecto de myOption";
$myOption = get_option( 'myOption' ) ? get_option( 'myOption' ) : $myOption_def;

Funciona bien, pero el problema es que necesito poder establecer la opción como "vacía", y cuando lo hago (desde un textarea en la página de opciones de mi plugin), obtengo el valor por defecto en lugar de una cadena vacía porque get_option( 'myOption' ) devuelve lo mismo si el valor de mi opción está vacío que si no existe.

¿Cómo puedo determinar cuándo mi opción no existe (y entonces establecer $myOption a mi valor por defecto), o cuándo el valor de mi opción está vacío (y entonces establecer $myOption a una cadena vacía)?

0
Todas las respuestas a la pregunta 4
1
16

Básicamente, para distinguir entre el valor booleano false y una cadena vacía '' debes usar un operador de comparación más estricto.

var_dump( '' == false ); // esto es 'true', se tratan como dos valores 'empty()'

var_dump( '' === false ); // esto es 'false', porque aunque ambos son 'empty()' son de diferente tipo

Pero hay más. Ya que lo que buscas es bastante común - get_option() ya puede proporcionar un valor por defecto por sí mismo. Así que tu código puede simplificarse a:

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

Nota que esto determinará correctamente una cadena vacía y no aplicará el valor por defecto en ese caso.

9 feb 2011 09:11:18
Comentarios

esa es la única respuesta válida en mi opinión, espero que también lo consigamos para las variables de consulta en el núcleo.

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

Podrías verificar si es nulo de la siguiente manera,

$id = "mi_opcion";

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

if ($opcion_existe) {
    update_option($id, $valor);
} else {
    add_option($id, $valor);
}
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 abr 2015 05:58:18
Comentarios

Por favor, explica qué hace tu código y cómo funciona

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

Ups, lo resolví yo mismo:

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

no lo hagas así, haz lo que Rarst sugirió en su lugar: $myOption = get_option( 'myOption', $myOption_def );. No necesitas reinventar la rueda. Ya está ahí, un valor por defecto para cualquier opción. Simplemente pásalo como segundo parámetro.

hakre hakre
9 feb 2011 17:48:13