为什么我不能在特定的WordPress页面模板加载时向body标签注入特定的类名?

问题描述:

我有一个WordPress网站,其中有一个自定义主题,我可以为每个网页创建模板部分。当加载特定页面模板(例如:abc.php)时,我想在header.php中包含/注入特定类(例如:abc)到body标签。为什么我不能在特定的WordPress页面模板加载时向body标签注入特定的类名?

首先我使用下面的代码在header.php它没有工作。

<body <?php if (is_page_template('template-parts/page/abc.php')) { body_class('abc'); } else { body_class(); } ?>> 

然后我说娄代码到的functions.php,但它不工作要么。

add_filter('body_class','abc_class'); 
function abc_class($classes) { 

    if (is_page_template('template-parts/page/abc.php')) { 
     $classes[] = 'abc'; 
    } 

    return $classes; 

} 

我不明白我在做什么错在这里。我怎样才能解决这个问题?

我能够添加以下的的functions.php因此,它需要的鼻涕虫是注入每次加载特定页面时都会将其添加到主体类中。

add_filter('body_class', function($classes) { 
if (is_page()){ 
    $slug = get_queried_object()->post_name; 
    return array_merge($classes, array($slug)); 
} 
    return $classes; 
}); 

所有is_page_template()函数的第一部作品为WP模板,我的意思是它在文件

/* 
* Template name: Your Super Template 
*/ 

所以,函数返回true年初与此模板的页面实际显示。我会告诉你更多,你甚至不需要添加自定义的body类,因为函数body_class()为每个页面模板添加了特定的唯一类:)

其次,页面模板可以在主题目录本身或1 -level子目录,所以

<body <?php if (is_page_template('abc.php')) { body_class('abc'); } else { body_class(); } ?>> 

<body <?php if (is_page_template('page-templates/abc.php')) { body_class('abc'); } else { body_class(); } ?>> 

你在2级子目录模板,所以它实际上不是一个页面模板,它是一个模板的一部分。

所以,在两个词,功能is_page_template()是页面模板而不是模板部件