wordpress get_option返回false

car*_*ics 9 php mysql wordpress

我有wordpress插件,注册设置如下:

register_settings("myplugin_settings","myplugin_option1");
Run Code Online (Sandbox Code Playgroud)

并在插件激活它添加选项,如:

add_option("myplugin_option1","");
Run Code Online (Sandbox Code Playgroud)

然后,如果我更新选项,如:

update_option("myplugin_option1","something else");
Run Code Online (Sandbox Code Playgroud)

然后尝试从数据库中获取它:

$myoption = get_option("myplugin_option1");
Run Code Online (Sandbox Code Playgroud)

get_option()返回false,偶数选项存在且值更新.

我知道值已更新并且存在选项,因为当我运行查询以获取选项时,我获得了值:

global $wpdb;
$query = 'SELECT * FROM wp_options WHERE option_name = "myplugin_option1";
$result = $wpdb->get_results($query);
Run Code Online (Sandbox Code Playgroud)

这回报了我的价值:"别的东西"

例如这段代码:

 $option = get_option("myplugin_option1");
 if(false == $option){
    global $wpdb;
    $query = 'SELECT * FROM wp_options WHERE option_name = "myplugin_option1"';
    $result = $wpdb->get_results($query);
 }
Run Code Online (Sandbox Code Playgroud)

执行此代码后,$ result将包含值:

Array
(
   [0] => stdClass Object
      (
        [option_id] => 11752
        [option_name] => myplugin_option1
        [option_value] => something else
        [autoload] => yes
      )
)
Run Code Online (Sandbox Code Playgroud)

因此选项存在并且具有值,但get_option()返回false.

我有这个问题只有3个选项,只在我的插件安装的一个网站上.有没有人知道为什么get_option()返回false,即使选项在数据库中,并且值为"其他".

car*_*ics 2

问题在于,我遇到问题的这三个选项以某种方式在 wp 缓存中缓存了两次。

因此,一个选项被缓存两次,并且 update_options() 总是更新这两个选项之一,而 get_option() 总是获取另一个以空值缓存的选项。

不知道这是怎么发生的,但清除缓存解决了我的问题。