web-dev-qa-db-ja.com

オプションが存在するが空であるかどうかを調べる方法は?

私は自分のプラグインの一つでこのようなものを使っています:

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

これは問題なく動作しますが、問題はオプションを "empty"に設定できるようにする必要があるということですが、それを行うと(プラグインのオプションページのtextareaから)、空の文字列ではなくデフォルト値になります。 get_option( 'myOption')は、オプションの値が空の場合と存在しない場合とで同じ値を返します。

では、自分のオプションが存在しないとき(そして$ myOptionをデフォルト値に設定するとき)、または私のオプション値が空のとき(そして$ myOptionを空の文字列に設定するとき)どうすればわかりますか?

2
user3007

基本的にfalseブール値と''空の文字列を区別するために、より厳密な 比較演算子 を使用する必要があります。

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

しかし、もっとあります。あなたが欲しいものは非常に典型的であるので - get_option() はすでにそれ自身でデフォルト値を提供することができます。だからあなたのコードは次のように単純化することができます。

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

これは空文字列を正しく決定し、その場合デフォルト値を適用しないことに注意してください。

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