我有一个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;
}
我不明白我在这里做错了什么。我该如何解决这个问题?
答案 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;
} );