将分类术语添加到单个 CPT 页面会从常规页面中删除正文 类
Adding taxonomy term to single CPT pages removes body classes from regular pages
我想为单个 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 页面,如下所示。 "selected-works" 是分类术语。
<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 页面而不影响其他页面?
使用 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' );
从我的评论中添加一个答案:
您需要将 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
参数永远不会返回到原始过滤器。
我想为单个 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 页面,如下所示。 "selected-works" 是分类术语。
<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 页面而不影响其他页面?
使用 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' );
从我的评论中添加一个答案:
您需要将 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
参数永远不会返回到原始过滤器。