Fatal error: Call to undefined function add_action() in D:\xampp\htdocs\excel\wp-content\plugins\DatabaseToExcel\download.php on line 13
我正在创建一个将数据库表导出到Excel工作表的插件。主要是我的插件中有两个文件,我发送一个post请求到download.php文件,其中包含将要导出的表名。我想确定管理员登录的download.php文件,但是当我调用任何WordPress核心功能时,会发生致命错误。我包括wp-load.php和其他类似的文件 -
require_once('../../../wp-load.php');
require_once('../../../wp-config.php');
require_once('../../../wp-includes/load.php');
在这种情况下,auth_redirect()等函数正常工作,没有任何错误。但我想将此插件上传到www.wordpress.org。
他们说使用这种方法包含文件并不好,我们无法批准它,因为另一个WordPress安装中的文件结构可能会有所不同,在这种情况下它将无法正常工作。
以下是wordpress.org的回复 -
在download.php中,STILL不受
保护require_once('../../../wp-load.php');
require_once('../../../wp-config.php');
require_once('../../../wp-includes/load.php');
包括wp-config.php,wp-blog-header.php,wp-load.php,或几乎任何其他WordPress核心文件,你必须通过包直接调用不是一个好主意,我们不能批准一个插件,除非有充分的理由加载文件,否则这样做。它很容易失败,因为并非所有的WordPress安装都具有完全相同的文件结构。
通常插件将包含wp-config.php或wp-load.php以获得对核心WordPress功能的访问权限,但有更好的方法可以做到这一点。最好将处理函数(需要但无法访问核心函数的函数)绑定到动作挂钩中,例如“init”或“admin_init”。
有关详细信息,请参阅插件API参考:http://codex.wordpress.org/Plugin_API
对于其他可能性,或为了更好地理解为什么我们不允许这样做,请阅读:http://ottopress.com/2010/dont-include-wp-load-please/
如果您正在尝试使用它,因为您需要访问WordPress之外的WordPress功能,我们实际上更愿意您根本不这样做。你的插件应该在WordPress中,只有登录和授权的人才能访问,如果它需要那种访问权限。您的插件页面应该像所有其他设置面板一样通过仪表板调用,这样,他们将始终可以访问WordPress功能。
这是我的第一个WordPress插件,经过几个小时的挣扎和阅读所有这些,我没有解决方案。
答案 0 :(得分:0)
加载WP文件后包含download.php文件。这是放在插件主文件(或加载器)中的代码示例:
add_action('wp_loaded', 'pluginPrefix_include_download_script');
function pluginPrefix_include_download_script() {
require('download.php');
}
如果您需要先加载此文件,还可以使用admin_init
等其他操作。
您还可以使用plugin_dir_path(__FILE__)
指定文件的路径,这将返回插件目录的路径,您可以像这样使用它:
function pluginPrefix_include_download_script() {
$pluginDirPath = plugin_dir_path(__FILE__);
require($pluginDirPath.'download.php');
}
如果你的download.php位于子文件夹(例如inc /),这可能会变得很方便。在这种情况下,您的include函数可能如下所示:
require($pluginDirPath.'inc/download.php')