我想为单个CPT页面添加分类术语,所以我通过使用以下代码来做到这一点:
//* Add CPT taxonomy terms to body class
function add_taxonomy_to_single( $classes ) {
if ( is_single() ) {
global $post;
$my_terms = get_the_terms( $post->ID, 'skill' );
if ( $my_terms && ! is_wp_error( $my_terms ) ) {
foreach ($my_terms as $term) {
$classes[] = $term->slug;
}
}
return $classes;
}
}
add_filter( 'body_class', 'add_taxonomy_to_single' );
对于预期的单个CPT页面,效果很好,如下所示。 “精选作品”是分类学术语。
<body data-rsssl="1" class="project-template-default single single-project postid-4829 logged-in woocommerce-js selected-works chrome">
但是,不幸的是,它也影响了常规页面(不是单个页面)。对于常规页面,它从body
中删除了所有类。
<body data-rsssl="1" class="chrome">
如何更改代码,使其仅影响单个CPT页面而不影响其他页面?
答案 0 :(得分:1)
从我的评论中添加答案:
您需要将return $classes
从if
语句中移出:
//* Add CPT taxonomy terms to body class
function add_taxonomy_to_single( $classes ) {
if ( is_single() ) {
global $post;
$my_terms = get_the_terms( $post->ID, 'skill' );
if ( $my_terms && ! is_wp_error( $my_terms ) ) {
foreach ($my_terms as $term) {
$classes[] = $term->slug;
}
}
}
return $classes;
}
add_filter( 'body_class', 'add_taxonomy_to_single' );
原因是body_class
过滤器挂钩在页面加载时运行,因此当您将$classes
传递到过滤器函数时,如果不满足if
语句,除非return
在if
之外,否则$classes
参数永远不会返回到原始过滤器。
答案 1 :(得分:0)
使用is_singular( 'your_cpt_name' );
而不是is_single()
,并像下面一样将CPT Name
传递到其中。
//* Add CPT taxonomy terms to body class
function add_taxonomy_to_single( $classes ) {
if ( is_singular('your_cpt_name') ) {
global $post;
$my_terms = get_the_terms( $post->ID, 'skill' );
if ( $my_terms && ! is_wp_error( $my_terms ) ) {
foreach ($my_terms as $term) {
$classes[] = $term->slug;
}
}
return $classes;
}
}
add_filter( 'body_class', 'add_taxonomy_to_single' );