在单个CPT页面上添加分类术语会从常规页面中删除正文类别

时间:2019-05-13 11:54:40

标签: wordpress custom-post-type taxonomy-terms

我想为单个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页面而不影响其他页面?

2 个答案:

答案 0 :(得分:1)

从我的评论中添加答案:

您需要将return $classesif语句中移出:

//* 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语句,除非returnif之外,否则$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' );