问题描述

通过 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
}

我相信混乱是两件事的结果:

  1. 文件涉及到”name” 。指定”file name” 将使文档更加清晰。

  2. 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。