如何以正确的方式在插件中包含PHP文件

时间:2011-01-21 作者:Bainternet

我的问题是,当我在主插件文件中包含一个类似以下内容的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\');
我得到:

致命错误:调用未定义的函数add\\u action()

在你说“使用”之前if(**function_exists**(\'add_action\')){“如果我使用它,那么它就是不起作用。

问题是:正确的方法是什么include, include_once, require 我什么时候用巫婆

8 个回复
最合适的回答,由SO网友:Bainternet 整理而成

首先,感谢所有回答的人,

我的问题是调用包含完整url的文件,这样它们就不会通过WordPress。这是因为正如我在问题上所说的,我是从主插件文件中调用它们的。因此,修复最终使用了:

include_once(\'/ipn/paypal-ipn.php\');
我在WordPress support.再次感谢您的回答!

SO网友:Chip Bennett

来晚了,但这里有一个“WordPress”的方法:使用plugin_dir_path( __FILE__ ), e、 g.:

<?php
include( plugin_dir_path( __FILE__ ) . \'ipn/paypal-ipn.php\');
?>
请注意,函数does 返回trailing slash 用于文件路径。

SO网友:Dwayne Charrington

我查看了我之前创建的几个插件,以了解我在插件中包含额外文件的不同方式,我注意到有两种方法可以使用,可能还有更多。

定义插件目录在插件内部使用以下定义来定义当前插件位置。

Example code:

define( \'PLUGIN_DIR\', dirname(__FILE__).\'/\' );  

只需简单地包含或要求即可;通过引用以下示例代码中的位置,在插件文件夹中包括、include\\u once、require或require\\u once。下面的示例将基于根插件目录中的一个文件,包括插件文件夹内文件夹中的另一个文件。

示例代码:

include "classes/plugin-core.php";

SO网友:mtekk

我最终放弃了Include的WordPress构造,并使用了以下内容:

require_once(dirname(__FILE__) . \'/filename.php);
我认为它实际上不会解决您的问题,这似乎是一个范围问题,但这是我使用的代码。

至于include和require之间的区别:
include将抛出warning 如果找不到文件,require将抛出fatal error 如果找不到文件

include\\u once和require\\u once如果已经包含/需要该文件/代码,则不会再次包含/需要该文件/代码(请注意,据我所知,这仅适用于特定目录中的特定文件)。

SO网友:Webord

Include

include()语句包含并计算指定的文件。

Include Once

include\\u once()语句在脚本执行期间包括并计算指定的文件。这是一种类似于include()语句的行为,唯一的区别是,如果文件中的代码已经包含,则不会再次包含它。顾名思义,它只会被包括一次。

Require

require()和include()在各个方面都是相同的,只是它们处理失败的方式不同。它们都会产生警告,但require()会导致致命错误。换句话说,如果希望丢失的文件停止页面处理,请不要犹豫使用require()。

Require Once

require\\u once()语句在脚本执行期间包括并计算指定的文件。这是一种类似于require()语句的行为,唯一的区别是,如果文件中的代码已经包含,则不会再次包含它。

上面的信息来自PHP文档,问题是没有一个正确的,这取决于代码的需要,我确实需要()处理一些重要的东西,比如函数,但对于主题文件,比如footer或循环,我使用include\\u一次或include,因为我可以处理警告并告诉用户/访问者发生了错误,而不仅仅是致命的错误

SO网友:Aamer Shahzad

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\');
注:致enqueu。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\');

SO网友:MikeSchinkel

你好@בניית אתרים:

当WordPress加载时,它定义add_action() 函数之前,它会尝试加载任何插件。如果您遇到错误,就会告诉我您正在做一些奇怪的事情,或者您的WordPress安装有问题。

您要让谁加载您的“插件”?您是否使用include*()require*() 加载它,也许在你的wp-config.php 文件

SO网友:varadha

每当您在工作目录中创建新文件时,每次都必须包含它。但是,尝试一种方法来扫描directroy并自动附加它,而不仅仅是php文件,这有助于在两侧(后端、前端)正确地包含php、js和css文件。

http://kvcodes.com/2014/05/wordpress-theme-development-include-files-automatically/

结束

相关推荐

获取在Functions.php中设置的变量,并在我的Custom Post模板中回显它们

在我的函数中设置了以下函数。php文件,以允许我的自定义帖子类型“Slideshow”工作。add_action( \'the_post\', \'paginate_slide\' ); function paginate_slide( $post ) { global $pages, $multipage, $numpages; if( is_single() && get_post_type() == \'lom_s