问题描述
通过 WordPress documentation,它表示 is_page_template()
与”template name”(如果提供) 进行比较。
我有一个模板存储在 page-homepage.php
中叫做 Homepage
:
/*
* Template Name: Homepage
* Description: The template for displaying the homepage
*/
当我使用该模板时,我有一些我想在我的 functions.php 中运行的代码:
if (is_page_template('Homepage')) {
...
但是当我在使用该模板的页面上时不会被触发。
当我看看 Wordpress 为 is_page_template()
执行的代码时,它实际上是检查文档名称,而不是模板名称…?
function is_page_template( $template = '' ) {
$page_template = get_page_template_slug( get_queried_object_id() );
if ( $template == $page_template )
return true;
在我的实例中,$page_template
似乎是 page-homepage.php
– 不是模板名称,就像文档建议一样吗?
我做错了吗?
最佳解决方案
你的条件应该是这样写的:
if (is_page_template('path/file.php')) {
// Do stuff
}
我相信混乱是两件事的结果:
-
文件涉及到”name” 。指定”file name” 将使文档更加清晰。
-
is_page_template()
背后的代码显示了get_page_template_slug()
功能的核心。这个功能实际上返回一个文件名,而不是模板块。 https://codex.wordpress.org/Function_Reference/get_page_template_slug
当指定 is_page_template()
函数的参数时 (如上例所示),文件路径是相对于主题根。
该函数在循环内不起作用。
次佳解决方案
我认为最好的事情是,它检查 FILE 名称,在你的情况下,它将是 page-homepage.php 。所以:
if (is_page_template('page-homepage.php')) {
...
其他需要考虑的事情是,如果模板文件实际上存储在主题内的另一个文件夹中。 read more
还有一件事,Template Name: Homepage
在创建页面或帖子时用于标识模板。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。