【问题标题】:wordpress get_option returning falsewordpress get_option 返回 false
【发布时间】:2015-07-06 17:20:25
【问题描述】:

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

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,即使选项在数据库中并且具有“其他”值。

【问题讨论】:

    标签: php mysql wordpress


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 包含在内,wordpress 功能运行良好。我只有 3 个选项有问题,其他所有选项都可以正常工作。我在一个循环中获得了选项,但这些选项都失败了。
      猜你喜欢
      • 2022-01-22
      • 1970-01-01
      • 2013-06-24
      • 2014-10-21
      • 1970-01-01
      • 2012-02-11
      • 2017-01-31
      • 2021-04-29
      • 2020-03-04
      相关资源
      最近更新 更多