2015-04-28 38 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