is_page_template()与什么比较?


10

查看Wordpress文档,它说is_page_template()与提供的“模板名称”进行比较。

我有存储在模板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_templatepage-homepage.php-不是模板名称,如文档所示...?

难道我做错了什么?


关于文档的良好观察。
birgire

Answers:


15

您的条件应这样写:

if (is_page_template('path/file.php')) { 
    // Do stuff
}

我认为混乱是由于两件事造成的:

  1. 该文档含糊地提及“名称”。指定“文件名”将使文档更加清晰。
  2. 后面的代码is_page_template()显示了该get_page_template_slug()功能的核心。该函数实际上返回文件名,而不是模板段。 https://codex.wordpress.org/Function_Reference/get_page_template_slug

在为is_page_template()函数指定参数时(如上例所示),文件路径是相对于主题根目录的。

此功能在循环内不起作用。


2
最好解释一下这里的路径代表什么。
birgire

1
添加了更多的说明和详细信息,这可能导致混淆。
jdm2112 '09

3
哇。混乱的双重打击。我可以理解文档有些含糊(尽管确实应该修复),但是我真的很惊讶,get_page_template_slug()实际上并没有返回结果。
Django Reinhardt

同意 进一步支持“命名事物”是编写代码时最难的事情之一的观点。
jdm2112 '09

该答案包含“最佳实践”解决方案。但是,如果您的页面使用的是“默认模板”(但实际上是页面模板),那么您可能会对此答案感兴趣。
rinogo

7

我认为最好说的是,它检查文件名,在您的情况下为page-homepage.php。所以:

if (is_page_template('page-homepage.php')) { 
  ...

其他需要考虑的事情是模板文件是否实际存储在主题内的另一个文件夹中。 阅读更多

还有一件事,Template Name: Homepage通常是在创建页面或帖子时用来标识模板的内容。


另一个答案指出-它也考虑了路径。page-templates/page-homepage.php与主题根目录中的模板不同。
Howdy_McGee

有趣的是,我只是想确认一下,我可以将页面模板存储在主题或子主题文件夹之外吗?
马里萨
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.