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

时间:2013-10-11 20:31:30

标签: 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);

但这并不是:

get_option("ntp_myoption");

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';
}

也许值得一提的是:我有一个包装实际插件的类,并且在.php文件的底部,我已经(在类定义之外),这段代码:< / p>

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

这些都像魅力一样。

5 个答案:

答案 0 :(得分:9)

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

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

我在页面顶部添加了以下代码。然后 get_option()功能完美无缺。

require_once('../../../../wp-config.php'); 

可能会有所帮助。

此致

答案 1 :(得分: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);

祝你好运!

答案 2 :(得分:1)

您可以测试以查看options.php是否正常工作:

http://yourdomain.com/wp-admin/options.php

如果您的选项已保存,则会列出它们。

但是...

add_options_page用于仪表板菜单。

你需要的是add_option才能使用get_option

http://codex.wordpress.org/Function_Reference/add_option

答案 3 :(得分:0)

我只是想在这里添加一个注释,以便任何人获得&#34; PHP致命错误:调用未定义的函数apply_filter&#34;错误。我做了谷歌搜索这个错误,发现了这个问题。

注意:您可能需要检查您的功能拼写,以确保您有&#34; apply_filters&#34;,复数,而不是&#34; apply_filter&#34;单数,因为这是我的问题(这导致我这篇文章!)。

答案 4 :(得分:-1)

我使用了Sumith的代码,但编辑了一下 - 这是唯一能够在这里提到的代码中起作用的代码。

这是我的:

require_once(dirname(__FILE__).'../../../../wp-config.php'); 
相关问题