Добавление термина таксономии к отдельным страницам CPT удаляет классы тела с обычных страниц - PullRequest
0 голосов
/ 13 мая 2019

Я хотел добавить термин таксономии для отдельных страниц 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, но не на другие страницы?

Ответы [ 2 ]

1 голос
/ 14 мая 2019

Добавление ответа от моего комментария:

Вам необходимо переместить 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 никогда не возвращается в исходный фильтр.

0 голосов
/ 13 мая 2019

Используйте 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' );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...