Как определить, существует ли опция, но она пустая?

9 февр. 2011 г., 07:02:05
Просмотры: 15.1K
Голосов: 4

Я использую что-то подобное в одном из своих плагинов:

$myOption_def = "Значение по умолчанию для myOption";
$myOption = get_option( 'myOption' ) ? get_option( 'myOption' ) : $myOption_def;

Это работает нормально, но проблема в том, что мне нужно иметь возможность установить опцию в "пустое" значение. Когда я делаю это (из текстового поля на странице настроек плагина), я получаю значение по умолчанию вместо пустой строки, потому что get_option('myOption') возвращает одинаковый результат как для пустой опции, так и для несуществующей опции.

Как я могу определить, когда опция не существует (и тогда установить $myOption в значение по умолчанию), а когда значение опции пустое (и тогда установить $myOption в пустую строку)?

0
Все ответы на вопрос 4
1
16

По сути, чтобы отличить логическое значение false от пустой строки '', необходимо использовать более строгий оператор сравнения.

var_dump( '' == false ); // вернёт 'true', так как оба значения считаются 'empty()'

var_dump( '' === false ); // вернёт 'false', потому что значения хоть и 'empty()', но разного типа

Но это ещё не всё. Поскольку ваша задача довольно типична — функция get_option() уже может сама предоставить значение по умолчанию. Таким образом, ваш код можно упростить до:

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

Обратите внимание, что в этом случае пустая строка будет определена корректно, и значение по умолчанию не будет применено.

9 февр. 2011 г. 09:11:18
Комментарии

это единственно верный ответ, по моему мнению, надеюсь, мы получим это и для переменных запроса в ядре.

hakre hakre
9 февр. 2011 г. 17:47:02
0
-1

Вы можете проверить на null следующим образом:

$id = "my_option";

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

if ($option_exists) {
    update_option($id, $value);
} else {
    add_option($id, $value);
}
21 февр. 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 апр. 2015 г. 05:58:18
Комментарии

Пожалуйста, объясните, что делает ваш код и как он работает

Pieter Goosen Pieter Goosen
26 апр. 2015 г. 08:37:54
1
-2

Ой, разберусь сам:

$myOption = (get_option( 'myOption' )==FALSE) ? get_option( 'myOption' ) : $myOption_def; 
9 февр. 2011 г. 07:05:22
Комментарии

не делайте так, вместо этого сделайте, как предложил Rarst: $myOption = get_option( 'myOption', $myOption_def );. Не нужно изобретать велосипед. Это уже есть в функции - значение по умолчанию для любой опции. Просто передайте его вторым параметром.

hakre hakre
9 февр. 2011 г. 17:48:13