个性化阅读
专注于IT技术分析

加载特定的WordPress页面模板时,无法向body标签注入特定的类名

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

}

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


#1


首先, 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(); } ?>> 

or

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

你的模板位于2级子目录中, 因此实际上不是页面模板, 而是模板的一部分。

因此, 用两个词来说, 函数is_page_template()用于页面模板, 但不适用于模板部分


#2


我能够在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;
} );  
赞(0)
未经允许不得转载:srcmini » 加载特定的WordPress页面模板时,无法向body标签注入特定的类名

评论 抢沙发

评论前必须登录!