2015-04-28 36 views
9

我有WordPress的插件,它像寄存器的设置:WordPress的get_option返回false

register_settings("myplugin_settings","myplugin_option1"); 

和插件激活它添加类似的选项:

add_option("myplugin_option1",""); 

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

update_option("myplugin_option1","something else"); 

及更高版本尝试从数据库中获取它:

$myoption = get_option("myplugin_option1"); 

get_option()返回false,甚至存在选项并更新值。

我知道值的更新和选项存在,因为当我运行查询来获取选项,我所获得的价值:

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

这将返回我的价值:“别的东西”

例如,这代码:该代码执行

$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); 
} 

后,$ result将包含值:

Array 
(
    [0] => stdClass Object 
     (
     [option_id] => 11752 
     [option_name] => myplugin_option1 
     [option_value] => something else 
     [autoload] => yes 
    ) 
) 

所以选项存在并具有值,但get_option()返回false。

我只有3个选项只有在我的插件安装在一个网站上的这个问题。有没有人有一些想法,为什么get_option()返回false甚至选项是在数据库中,并具有“别的东西”的价值。

回答

1

与此问题是,我有问题的那三个选项以某种方式在wp缓存中缓存了两次。

所以一个选项被缓存了两次,而update_options()总是更新这两个选项中的一个,而get_option()总是得到另一个用空值缓存的选项。

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

0

您应该在任何外部文件中包含文件wp-blog-header.php以便能够使用Wordpress功能。该文件位于您的wordpress根文件夹中。

+0

它包括在内,wordpress功能正常工作。我有3个选项的问题,对于其他所有其他工作正常。我在一个循环中获取选项,只是失败。 – carpics