问题描述
我的问题是在主要的插件文件我包括一个这样的 PHP 文件:
include(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/paypal-ipn.php');
// or
include_once(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/paypal-ipn.php');
// or
require(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/paypal-ipn.php');
// or
require_once(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/paypal-ipn.php');
在这个文件上我有一个 WordPress 函数的调用,如:
add_action('hook', 'callback');
我得到:
Fatal Error: Call to undefined function add_action()
现在在你说 「使用 if(**function_exists**('add_action')){
」 之前,如果我使用那么它只是不工作。
问题:
- 这样做的正确方法是什么?
include
,include_once
,require
和什么时候使用巫婆有什么区别?
最佳解决方案
迟到的这个聚会,但这里是”WordPress” 的方式:使用 plugin_dir_path( __FILE__ )
,例如:
<?php
include( plugin_dir_path( __FILE__ ) . 'ipn/paypal-ipn.php');
?>
请注意,该函数确实返回文件路径的尾部斜线。
次佳解决方案
我查看了我之前创建的几个插件,以查看不同的方式,我已经在插件中添加了额外的文件,我注意到有两种方法可以使用,可能更多。
定义你的插件目录
您的插件内部有以下定义来定义当前的插件位置。
示例代码:
define( 'PLUGIN_DIR', dirname(__FILE__).'/' );
只是一个直线包括或要求
你可以简单地使用; 通过引用下面的示例代码中的位置,在您的插件文件夹中包含 include_once,require 或 require_once 。以下示例将基于您的根插件目录中的一个文件,包括您的插件文件夹内的文件夹中的另一个文件。
示例代码:
include "classes/plugin-core.php";
第三种解决方案
我最终将 for WordPress 构造用于包含并使用以下内容:
require_once(dirname(__FILE__) . '/filename.php);
我不认为它会真正解决你的问题,这似乎是一个范围问题,但它是我使用的代码。
至于 include 和 require 之间的区别:如果没有找到文件,include 将会发出警告如果没有找到该文件,则会抛出一个致命错误
如果 include_once 和 require_once 已经被包含/必需,则不再包含/要求文件/代码 (请注意,据我所知,这仅适用于特定目录中的特定文件) 。
第四种方案
首先,感谢所有回答的人,
我的问题是调用包含完整的 url 的文件,这样他们不会通过 WordPress 。这是因为我在主题插件文件中提到这个问题。所以修复最后使用:
include_once('/ipn/paypal-ipn.php');
我在 WordPress support 阅读。再次感谢您的回答!
第五种方案
Include
The include() statement includes and evaluates the specified file.
Include Once
The include_once() statement includes and evaluates the specified
file during the execution of the
script. This is a behavior similar to
the include() statement, with the only
difference being that if the code from
a file has already been included, it
will not be included again. As the
name suggests, it will be included
just once.Require
require() and include() are identical in every way except how they
handle failure. They both produce a
Warning, but require() results in a
Fatal Error. In other words, don』t
hesitate to use require() if you want
a missing file to halt processing of
the page.Require Once
The require_once() statement includes and evaluates the specified
file during the execution of the
script. This is a behavior similar to
the require() statement, with the only
difference being that if the code from
a file has already been included, it
will not be included again.
上面的信息来自于 PHP 文档,事情是没有一个正确的,将依赖于代码的需要,我对 require() 在重要的东西就像函数,但是在主题文件,如页脚或循环我使用 include_once 或 include,因为我可以处理警告,并向用户/访问者发出发生错误,而不是只是一个 fatal_error
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。