我可以在模板文件中使用Require()函数吗?

时间:2017-05-25 作者:Alex

在我的模板文件中,我想包含一个库。我将库上载到我的主题文件夹中,在我的主题文件夹中是我的自定义模板文件。在我的自定义模板文件中require \'OAuth2/Client.php\'; 但当我加载使用该模板的页面时,它会给出以下信息:

警告:require(OAuth2/Client.php):未能打开流:在/home/healthf0/public\\html/wp-content/themes/healthfitcorpwell/single-iframe中没有这样的文件或目录。php在线4

显然文件确实存在,我可以通过FTP看到它就在那里。为什么告诉我这些?

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

您看到此错误是因为require正在使用相对路径删除文件。正如@Mark Kapulun在评论中指出的,当require正在加载文件。相反,您希望显式地使用绝对路径。

使用get_template_directory() 返回

当前主题目录的绝对路径(不带尾随斜杠)

在模板文件中,require语句如下所示:

require( get_template_directory() . \'/path/from/theme/root/to/file.php\');

get_stylesheet_directory() 如果你正在制作一个儿童主题。doc

Update:

正如@JackJohnsson在他的回答中指出的,您也可以考虑使用require_once 相反这将保护您避免因文件的多个包含内容而产生的错误。看见this answer 了解更多详细信息。

SO网友:Cedon

是,但不允许使用相对路径。您总是需要绝对路径。可按以下方式进行:

<?php require( get_stylesheet_directory() . \'/OAuth2/Client.php\'); ?>
get_stylesheet_directory() 将返回绝对路径,其中style.css 位于主题的。它不会将尾部/ 尽管如此。

SO网友:Johansson

您可以使用get_template_directory() 获取模板目录的绝对路径。例如,如果您的php文件位于/my-theme/OAuth2/Client.php, 使用:

require_once(get_template_directory().\'/OAuth2/Client.php\');

请记住,出于安全目的,不要使用relative或直接访问PHP文件。此外,您必须在client.php 文件以使其更安全:

if ( ! defined( \'ABSPATH\' ) ) {
    exit(\'No script rookies, please.\');
}
这不允许直接访问PHP文件。

我也会同意require_once 而不是require 以确保在我意外地将其包含在其他地方时不会触发任何错误。

结束

相关推荐

Functions.php中的入队样式

这对我没用functions.php: if( is_page_template( \'template-flat.php\' ) ) { function flatsome_scripts() { wp_enqueue_style( \'flatsome-style\', get_template_directory_uri() .\'/flatash/css/foundation.css\', array(), \'2.1\', \'all\'); }