在文档标题中使用模板中的包含

时间:2019-01-13 作者:Rick Hellewell

在模板中,我需要include_once 一个外部PHP(一个include.php) 它包含我需要在模板中使用的函数。

这些函数包括CSS样式和外部JS脚本。

CSS位于include中的函数内。php。JS脚本也需要在该区域中。

所以我需要include_once("includes.php") (位于主题的根文件夹中)。我想我会使用类似的代码:

add_action(\'wp_head\', \'fst_include\',20);
function fst_include() {
    include_once get_stylesheet_directory(). "/includes.php"; // load required functions
return;
}
由于动作是“wp\\u head”,因此应该得到include_once("includes.php") 头部区域。我使用get_stylesheet_directory 因为包括。php文件将位于子主题中。

加载后,我可以添加一些CSS:

add_action(\'wp_head\', \'more_css\',30) // \'more_css\' is a function inside the includes.php file that contains some CSS
并添加一些JS

add_action(\'wp_head\', \'some_script\',30) // \'some_script\' is a function inside the includes.php file that adds some JS
我将最后两个add\\u操作的优先级设置为“30”,以便在include之后加载它们。php文件已加载。(因为includes.php的优先级为20。)

但其中包括。php文件似乎没有加载,因为“some\\u script”函数(包含在includes.php中)不可用,并导致错误。

所以我需要一种方法来添加include_once(\'includes.php\') 以便模板中的函数“稍后”可用。我不这么认为get_template_part 是适当的,因为include_once 需要在分区中。

Added - But Why?

为什么我需要这样做?“我的模板”显示表单。表单的代码和功能在include中。php文件。甚至表单也由include中的函数显示。php。

包括。php文件是一个包含函数、脚本和操作的“包”,在显示表单时,更改DOM元素以执行特定功能,用户填写表单并提交表单。(“包”是用于保护表单(如联系人表单)免受垃圾邮件机器人攻击的过程。这是一个有效的过程,但有点复杂。如果你真的感兴趣,你可以here 了解它。)

包括。php文件还构建为可在非WP页面上使用的独立/非WP代码。我不想维护两个版本的代码。

如果在WP网站上使用,该表单必须以任何主题的视觉外观“活”下来。我想模板是最好的方法。所以我需要得到我的收入。php“嵌入”模板,以便可以调用其函数。

至于add\\u操作中使用的优先级,这是为了确保包含。php文件包含在该区域中,因此我可以调用包含表单所用CSS的函数。如果包括。如果不先加载php,则CSS调用函数将失败。

2 个回复
最合适的回答,由SO网友:Rick Hellewell 整理而成

经过大量的实验,再加上谷歌的有限帮助,我想出了如何include\' 模板中的外部函数文件。

关键是使用get_template_part 在模板的开头(模板标题之后)。该函数中指定的文件必须位于主题的根文件夹中,尽管我认为它也可能位于主题的模板文件夹中。

get_template_part(\'my_custom_functions\');
这将相当于\'include\' 在非WP PHP代码中。会的include\' 调用的文件my_custom_functions.php .

一旦这样做了,就可以使用过滤器在生成的页面的<head> 区域或您需要的任何其他过滤器,如:

add_filter(\'wp_head\',\'some_function\');
这将调用some_function() 在您的my_custom_functions.php 文件(当然,要确保函数名是唯一的。)

这个过程不容易通过谷歌找到,它将允许您“包含”一个文件,然后在WP模板中使用包含文件中的函数。

SO网友:Tom J Nowell

不建议在操作中包含PHP文件,并考虑highly unusual. 如果你想做的事情奏效了,它就会很脆弱,并且严重依赖于订单。

代码不起作用的原因:

add_action(\'wp_head\', \'fst_include\',20);
是因为添加的操作的优先级为10 默认情况下,include的优先级为20,因此它发生在其他挂钩之后,而不是之前。因此,当more_css 已执行,但尚未定义。

相反,不要将文件加载到挂钩上,只需立即加载它,以便定义函数而不是执行函数,然后将函数添加为操作。

一般来说,混合加载代码和运行代码是一个坏主意。尝试:

加载代码或自动加载器创建所有对象,但不要运行它们,然后在所有对象都组装好后运行它