我正在尝试编写一个相对简单的插件。我有两个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,看看会发生什么。奇怪的
最合适的回答,由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
, 看看错误是否消失。