How to find out if option exists but is empty?

I am using something like this on one of my plugins:

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

That works fine, but the problem is that I need to be able to set the option to “empty”, but when I do that (from a textarea on my plugin’s option page), I get the default value instead of an empty string because get_option( ‘myOption’ ) returns the same if my option value is empty than if it doesn’t exists.

Read More

So how can I figure out when my option doesn’t exist (and then set $myOption to my default value), or when my option value is empty (and then set $myOption to an empty string)?

Related posts

Leave a Reply

4 comments

  1. Basically to distinguish between false boolean value and '' empty string you must use more strict comparison operator.

    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
    

    But there is more. Since what you want is very typical – get_option() already can provide default value on its own. So your code can be simplified to:

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

    Note that this will correctly determine empty string and won’t apply default value in that case.

  2. You could check for null like so,

    $id = "my_option";
    
    $option_exists = (get_option($id, null) !== null);
    
    if ($option_exists) {
        update_option($id, $value);
    } else {
        add_option($id, $value);
    }
    
  3. 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;
    }