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

时间:2017-10-19 14:29:19

标签: php html wordpress wordpress-theming custom-wordpress-pages

我有一个wordpress网站,其中有一个自定义主题,我可以为每个网页创建模板部分。当一个特定的页面模板(例如:abc.php)加载时,我想在 header.php 中包含/注入一个特定的类(例如:abc)到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;

}

我不明白我在这里做错了什么。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

首先,is_page_template()函数适用于WP模板,我的意思是在文件的开头有

/*
 * Template name: Your Super Template
 */

因此,函数返回true是实际显示此模板的页面。我会告诉你更多,你甚至不必添加自定义主体类,因为函数body_class()为每个页面模板添加了特定的唯一类:)

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

<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()用于页面模板,但不用于模板部分

答案 1 :(得分:0)

我能够在 functions.php 中添加以下内容,以便每次特定页面加载时都会使用slug并将其注入body类。

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