我有一个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;
} );
评论前必须登录!
注册