_PAGE_TEMPLATE()与什么进行比较?

时间:2016-09-08 作者:Django Reinhardt

查看Wordpress documentation, 上面说is_page_template() 与“模板名称”(如果提供)进行比较。

我有一个模板存储在page-homepage.php 调用Homepage:

/*
 * Template Name: Homepage
 * Description: The template for displaying the homepage
 */
我想在函数中运行一些代码。使用该模板时使用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 -- 不是模板名称,如文档所示。。。?

我做错什么了吗?

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

你的情况应该这样写:

if (is_page_template(\'path/file.php\')) { 
    // Do stuff
}
我认为这种混乱是由两件事造成的:

这些文件是指;“名称”;含糊不清地。指定;“文件名”;将使文档更加清晰is_page_template() 显示get_page_template_slug() 核心功能。此函数实际上返回一个文件名,而不是模板slug。https://codex.wordpress.org/Function_Reference/get_page_template_slug在为is_page_template() 函数(如上例所示),文件路径相对于主题根。

此函数在循环内不起作用。

编辑:这里也要注意一个重要问题。这个is_page_template() 如果页面使用层次结构中的默认模板,函数将返回空/假。如果未指定自定义模板,则必须使用其他方法,例如basename(get_page_template()). 更多详细信息,请参见雅各布的回答:https://wordpress.stackexchange.com/a/328427/45202

SO网友:Malisa

我认为最好的说法是,它检查文件名,在您的情况下,它将是页面主页。php。因此:

if (is_page_template(\'page-homepage.php\')) { 
  ...
需要考虑的其他事项是,模板文件是否实际存储在主题内的另一个文件夹中。read more

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