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');
我得到:
致命错误:调用未定义函数add_action()
现在在您说“使用
if(**function_exists**('add_action')){
”之前,如果我使用它,那将不起作用。问题:
会是什么正确的方法是什么?
include
,include_once
,require
和我什么时候使用巫婆有什么区别?#1 楼
这次聚会来晚了,但是这是“ WordPress”方式:使用plugin_dir_path( __FILE__ )
,例如:<?php
include( plugin_dir_path( __FILE__ ) . 'ipn/paypal-ipn.php');
?>
请注意,该函数的确返回文件路径的尾部斜杠。
评论
请注意,通过使用__FILE__,它将相对于您从中调用它的当前文件进行输出,因此,如果您的include语句是从插件文件结构内的子目录中完成的,则也将获得该子目录。
– squarecandy
18年1月30日在20:30
替代方法-如果需要相对路径,则是require_once(plugin_dir_path(__ DIR __)。'/ myfile.inc');
–FoggyDay
19-10-4在20:28
#2 楼
我浏览了以前创建的几个插件,以了解在插件中包含额外文件的不同方式,我注意到可以使用两种方法,可能还有更多方法。定义您的插件目录
您的插件内部具有以下定义,以定义当前的插件位置。
示例代码:
define( 'PLUGIN_DIR', dirname(__FILE__).'/' );
只需简单地包含或要求
即可使用;通过参考以下示例代码中的位置,在插件文件夹中包含,include_once,require或require_once。以下示例将基于您的根插件目录中的文件,其中包括位于您的插件文件夹内的文件夹中的另一个文件。
示例代码:
include "classes/plugin-core.php";
评论
相对包括可能带来各种令人讨厌的意外问题。
–马克·卡普伦
17年12月1日在7:47
#3 楼
首先,感谢所有回答的人,我的问题是用不完整的WordPress调用包含文件的完整URL。发生这种情况是因为正如我在问题上所说,我是从主插件文件中调用它们的。因此此修复程序最终使用了:
include_once('/ipn/paypal-ipn.php');
我在WordPress支持中阅读了有关内容。
再次感谢您的回答!
评论
您能否重新考虑将这个答案(wordpress.stackexchange.com/a/32002/123092)标记为已接受?
–我是最愚蠢的人
17年9月18日在10:28
#4 楼
我最终放弃了包含的WordPress构造,并使用了以下内容:require_once(dirname(__FILE__) . '/filename.php);
我认为它不会真正解决您的问题,这似乎是一个范围问题,但这是我使用的代码。
关于include和require之间的区别:
如果找不到该文件,include将抛出警告
require将引发致命错误如果找不到文件,则会出现错误
include_once和require_once将不再包含/要求文件/代码(如果已经包含/要求)(请注意,据我所知,这仅用于特定目录中的特定文件)。
#5 楼
Include
include()语句包括并评估指定的文件。
Include一次
include_once()语句包括和在执行
脚本期间评估指定的
文件。这是与
include()语句类似的行为,唯一的区别是,如果已经包含了来自文件的代码,则将不包含该文件。再次。就像
名称所暗示的那样,它只会被包含一次
。
Require
require()和include()在所有方面都相同,除了他们
如何处理失败。它们都产生
警告,但是require()导致致命错误。换句话说,如果您想要
丢失的文件来暂停页面的处理,请不要犹豫使用require()。
需要一次
/>
require_once()语句在执行
脚本期间包含并评估指定的
文件。这是与
require()语句类似的行为,唯一的区别是,如果
文件中的代码已经被包含,则
将不被包含。再次。
上面的信息来自PHP文档,东西没有正确的信息,将取决于代码的需要,我在重要内容上使用了require()类似于函数,但是在页脚或循环之类的主题文件上,我使用include_once或include,因为我可以处理警告并向发生错误的用户/访问者说,而不仅仅是fatal_error
评论
正如@mtekk所说,我建议您使用tis结构:require_once(dirname(FILE)。'/filename.php);
– Webord
2011年1月21日在3:35
#6 楼
嗨@בנייתאתרים:当WordPress加载时,它在尝试加载任何插件之前定义了
add_action()
函数。您遇到错误的事实告诉我您做的很奇怪,或者您的问题有误WordPress安装。 您要向谁加载“插件”?您是使用
include*()
还是require*()
加载它,也许是在您的wp-config.php
文件中?#7 楼
include( plugin_dir_path( __FILE__ ) . 'ipn/paypal-ipn.php');
或
define( 'PLUGIN_ROOT_DIR', plugin_dir_path( __FILE__ ) );
include( PLUGIN_ROOT_DIR . 'ipn/paypal-ipn.php');
或
$plugin_dir_path = plugin_dir_path( __FILE__ );
include( $plugin_dir_path . 'ipn/paypal-ipn.php');
注意:入队。插件内的css和.js文件
admin_enqueue_scripts
使用plugin_dir_url( __FILE__ )
$plugin_dir_uri = plugin_dir_url( __FILE__ );
wp_enqueue_style( 'plugin-style', $plugin_dir_uri . 'css/plugin-style.css');
#8 楼
每当您在工作目录中创建一个新文件时,都必须每次都包含它。但是尝试一种方法来扫描您的Directroy并自动附加它,不仅限于php文件,这有助于在两侧(后端,前端)正确地包含php,js和css文件。http://kvcodes.com/2014/05/wordpress-theme-development-include-files-automatically/
评论
请从提供给您答案的链接中添加相关信息。将链接用于信用目的。请编辑您的问题
–Pieter Goosen
2014年5月29日下午5:48
评论
如果收到该消息,说明您做错了。从这些文件开始运行功能之前,请确保包括所有文件多数民众赞成在没有,电话都在我包括的文件内!
大声笑,现在我在上面的代码中看到WP_PLUGIN_URL :)
简单地说,您只能通过文件路径而不是URI包含()文件。
这份Codex文章(可能是在您问了问题之后写的)很有帮助:codex.wordpress.org/Determining_Plugin_and_Content_Directories