我几乎到处搜索过,但提出的答案对我没有帮助。
问题:我安装了 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");
Both add_options_page
and get_option
在同一文件夹中的源文件中定义(wp-includes\option.php
and wp-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 文件的底部,我有(在类定义之外)以下代码:
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'));
}
这些都像魅力一样发挥作用。