Fatal error: Call to undefined function add_action() in D:\xampp\htdocs\excel\wp-content\plugins\DatabaseToExcel\download.php on line 13
我正在创建一个插件来将数据库表导出到 Excel 工作表。主要是我的插件中有两个文件,我正在向 download.php 文件发送一个 post 请求,其中包含将导出的表名。我想确定管理员已登录 download.php 文件,但是当我调用任何 WordPress 核心功能时,会发生 fatal error 。我包括 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 中,仍然不 protected
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 功能,但有更好的方法可以做到这一点。最好将处理函数(那些需要但无权访问核心函数的函数)绑定(bind)到操作 Hook 中,例如“init”或“admin_init”。
有关更多信息,请参阅插件 API 引用:http://codex.wordpress.org/Plugin_API
对于其他可能性,或者为了更好地理解为什么我们不允许这样做,请阅读:http://ottopress.com/2010/dont-include-wp-load-please/
如果您因为需要访问 WordPress 外部的 WordPress 功能而尝试使用它,我们实际上更希望您根本不这样做。你的插件应该在 WordPress 中,只有登录和授权的人才能访问,如果它需要那种访问。您的插件页面应该像所有其他设置面板一样通过仪表板调用,这样,它们将始终可以访问 WordPress 功能。
这是我的第一个 WordPress 插件,经过数小时的努力和阅读所有这些,我没有解决方案。
最佳答案
加载 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/),这可能会很方便。在这种情况下,您的包含函数可能如下所示:
require($pluginDirPath.'inc/download.php')
关于php - WordPress 插件 : How to resolve "Call to undefined function add_action() as well as add_action()"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32094471/