加载特定的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【加载特定的WordPress页面模板时,无法向body标签注入特定的类名】首先, 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; } );

    推荐阅读