Wordpress:PHP致命错误:调用未定义的函数get_option()

tes*_*ser 8 php wordpress wordpress-plugin

我几乎到处搜索,但建议的答案对我没有帮助.

问题:我有一个Wordpress安装,最新版本(3.6.1).我已经多次完成了一个干净的安装,查看了wp-includes/option.php其他文件,我很确定它一切正常,并且都有正确的内容.

我正在开发一个插件,我正在使用Wordpress定义的函数get_option.每当我的代码调用该函数时,我都会得到500: internal server error响应.很奇怪,因为应该从Wordpress框架中调用插件的代码...

让它变得更加奇怪:在那些包含文件中定义的其他函数,比如add_options_page,完美地工作并且表现得像它们应该的那样.

因此,例如,这有效:

$pageTitle = "Title for my Options Page";
$menuLink = "Title for my Menu Link";
$userAccessLevel = 8; //that's admin
$pageSlug = "slug-to-my-plugin-options-page";
$callbackFunction = array($this, 'optionsPage');
add_options_page($pageTitle, $menuLink, $userAccessLevel, 
        $pageSlug, $callbackFunction);
Run Code Online (Sandbox Code Playgroud)

但这不是:

get_option("ntp_myoption");
Run Code Online (Sandbox Code Playgroud)

双方add_options_pageget_option在同一文件夹(源文件中定义wp-includes\option.phpwp-includes\plugin.php),这两个功能在这些文件是有效的,代码块两种以上是在我的插件相同的文件,我不包括或需要的任何文件.

有人有线索吗?


正如所问,我调用的完整代码块get_option- 它来自我的类​​的构造函数,它包装了插件.

function __construct() {
    global $wpdb;
    $this->table_iso = $wpdb->prefix . "ntp_iso";
    $this->pluginUrl = get_option('siteurl') . '/wp-content/plugins/my-plugin';
}
Run Code Online (Sandbox Code Playgroud)

也许值得一提:我有一个包装实际插件的类,在.php文件的底部,我有(在类定义之外),这段代码:

global $tp;
$tp = new MyPlugin();
$plugin = plugin_basename(__FILE__);

register_activation_hook( __FILE__, array($tp, 'install'));
register_deactivation_hook( __FILE__, array($tp, 'deactivate'));
add_action('add_meta_boxes', array($tp, 'init'));
if (is_admin()) {
    add_action('admin_menu', array($tp, 'addOptionsPage'));
    add_filter("plugin_action_links_$plugin", array($tp, 'addSettingsLink'));
}
Run Code Online (Sandbox Code Playgroud)

这些都像魅力一样.

Sum*_*han 10

我得到了相同的致命错误,然后我加载了相关路径的wp-config.php文件.

我的文件是wp-content/plugins/myplugin/css/mystyle.php

我在页面顶部添加了以下代码.然后get_option()函数完美运行.

require_once('../../../../wp-config.php'); 
Run Code Online (Sandbox Code Playgroud)

可能这会有所帮助.

问候


Ray*_*Ray 8

我怀疑wp-includes\option.php没有被加载.

只是为了咧嘴笑,就在调用get_options()之前添加

include_once('wp-includes\option.php');

或者尝试在option.php中调用其他内容,例如: update_option(null);

option.php包含在内部,wp-includes/functions.php同时plugin.php包含在几个不同的地方之一.

您可以通过将其插入代码中来查看当前包含/所需的所有文件:

 $includedStuff = get_included_files();
 print_r($includedStuff);
Run Code Online (Sandbox Code Playgroud)

祝好运!