将插件文件正确地包含到主要插件文件中

3

我已经遇到这个问题一段时间了,但一直都是绕过它工作的,现在打算最终解决它。

我正在尝试像这样将文件包含到我的主插件文档中(其中包含插件标题和版本):

define('SBT_PLUGIN_URL', plugin_dir_url(__FILE__));

include(SBT_PLUGIN_URL . 'competition_table.php');

在competition_table.php文件中,需要运行add_shortcode()函数,以便将短代码注册到WordPress中。请注意不要删除HTML标签。
function add_table() {
  //Run code here
}
add_shortcode('competition_table', 'add_table');

当我在网站上运行代码时,链接正确解决,包括正确的文件,但是我收到以下致命错误:
Call to undefined function add_shortcode()

然而,如果我将与competition_table.php中完全相同的代码添加到我的主插件文档中,那么代码就可以正常运行。

所以,基本上,我的问题是,为什么WordPress不能识别它自己的函数,如何包含该文件以使代码正确运行?

提前感谢。


展示competition_table.php的基本结构。请查看SSCCE指南。 - brasofilo
这是一个简单的短代码调用,实际上它是function add_table() {//run code here}add_shortcode('competition_table', 'add_table'); - ThallerThanYall
好的,我知道,但上面的链接解释了为什么在寻求代码问题帮助时应包含一个简短、自包含、正确(可编译)的示例 - brasofilo
1
代码已被编辑。抱歉,我是新来的。 - ThallerThanYall
2个回答

1
你需要开启WP_DEBUG来进行开发。它会输出一个错误:wrapper is disabled in the server configuration。这导致我找到了这个:"相信我,你不想从URL中引入文件。"
然后我意识到你正在使用plugin_dir_url()定义该常量,而你所需要的是一个路径。下面的魔术常量可以完成这项工作:
include_once __DIR__ . '/competition_table.php';

1
感谢 @b__ 的反馈,我成功解决了这个问题。
由于某些原因,魔术常量在 WordPress 上并不总是有效,但是您可以使用其等效物来达到相同的效果:
include_once dirname(__FILE__) . '/competition_table.php';

在创建WordPress插件时,如果需要包含文件,请始终通过路径而不是URL进行包含。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接