无法从我的插件访问某些WordPress功能

时间:2011-06-25 作者:Yoav Aner

我正在尝试编写一个相对简单的插件。我有两个php文件,一个包含在另一个中,如下所示:

define( \'PLUGIN_DIR\', dirname(__FILE__).\'/\' );
include_once(PLUGIN_DIR . \'/included_file.php\');
事情看起来很好。但是,当我尝试从包含的文件中调用一些wordpress函数时,我会出错:

致命错误:调用未定义的函数xxx()。。。

奇怪的是,这只适用于某些函数,而不适用于其他函数。例如,如果我将此代码放在包含文件的顶部:

if (!function_exists(\'add_action\')) echo "<h1>add_action not found</h1>";
if (!function_exists(\'check_admin_referer\')) echo "<h1>check_admin_referer not found</h1>";
if (!function_exists(\'wp_verify_nonce\')) echo "<h1>wp_verify_nonce not found</h1>";
if (!function_exists(\'wp_nonce_field\')) echo "<h1>wp_nonce_field not found</h1>";
我得到以下输出:

check_admin_referer not found
wp_verify_nonce not found
因此,在包含的文件中,这四个函数中只有两个是可访问的。。。

我可能错过了一些非常基本的东西,但我有点卡住了。

更新:我尝试创建一个非常基本的插件:

<?php
/*
    Plugin Name: Test this
    Plugin URI: http://www.gingerlime.com
    Description: test
    Author: Yoav Aner
    Version: 1.0
    Requires at least: 3.1
    Author URI: http://blog.gingerlime.com
    License: GPL 2.0, @see http://www.gnu.org/licenses/gpl-2.0.html

*/
if (!function_exists(\'add_action\')) echo "<h1>add_action not found</h1>";
if (!function_exists(\'check_admin_referer\')) echo "<h1>check_admin_referer not found</h1>";
if (!function_exists(\'wp_verify_nonce\')) echo "<h1>wp_verify_nonce not found</h1>";
if (!function_exists(\'wp_nonce_field\')) echo "<h1>wp_nonce_field not found</h1>";
if (function_exists(\'add_action\')) echo "<h1>add_action found</h1>";
if (function_exists(\'check_admin_referer\')) echo "<h1>check_admin_referer found</h1>";
if (function_exists(\'wp_verify_nonce\')) echo "<h1>wp_verify_nonce found</h1>";
if (function_exists(\'wp_nonce_field\')) echo "<h1>wp_nonce_field found</h1>";
?>
一旦插件被激活,它就会打印出来

check\\u admin\\u找不到referer

wp\\u verify\\u nonce未找到

找到add\\u操作

找到wp\\u nonce\\u字段

我在两个wordpress安装上试用了它。我可以试试全新的wordpress,看看会发生什么。奇怪的

1 个回复
最合适的回答,由SO网友:Chip Bennett 整理而成

首先,自从if (!function_exists(\'check_admin_referer\')) echo "<h1>check_admin_referer not found</h1>"; 代码正在运行,然后您已经消除了正确包含插件子文件的问题。

其次,这四个函数都是WordPress的核心函数,因此您应该永远不会得到call to undefined function 其中任何一个都有错误。你能发布你的相关插件代码吗,这样我们就可以看到发生了什么?

EDIT

我的猜测是,在WordPress处理序列中的某些操作之前,某些函数是不可用的。

尝试将函数挂接到init, 或admin_init, 看看错误是否消失。

结束