最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Output all terms in a custom taxonomy and add a "active" class only to the ones attached to the current post

programmeradmin6浏览0评论

I want to output all the terms in my custom taxonomy and at the same time add a class to any of these that are attached to the current post.

I'm doing this in a custom shortcode that displays on each single post page.

I've used get_terms() to show all the terms in the taxonomy but I can't work out how to check if each term is attached to the current post.

$terms = get_terms( array(
    'taxonomy' => 'package',
    'hide_empty' => false
) );

if (!empty($terms) && ! is_wp_error( $terms )) {
  echo '<ul>';
  foreach ($terms as $term) {
    echo '<li>' . $term->name . '</li>';
  }  
  echo '</ul>';  
}

I want to output all the terms in my custom taxonomy and at the same time add a class to any of these that are attached to the current post.

I'm doing this in a custom shortcode that displays on each single post page.

I've used get_terms() to show all the terms in the taxonomy but I can't work out how to check if each term is attached to the current post.

$terms = get_terms( array(
    'taxonomy' => 'package',
    'hide_empty' => false
) );

if (!empty($terms) && ! is_wp_error( $terms )) {
  echo '<ul>';
  foreach ($terms as $term) {
    echo '<li>' . $term->name . '</li>';
  }  
  echo '</ul>';  
}
Share Improve this question edited Oct 1, 2020 at 11:36 FreddieE asked Sep 30, 2020 at 16:40 FreddieEFreddieE 1134 bronze badges 1
  • Where did you put the code? In the taxonomy template, e.g. taxonomy-my_tax.php? And what is the "current post"? Where does it come from? – Sally CJ Commented Sep 30, 2020 at 19:52
Add a comment  | 

1 Answer 1

Reset to default 1

how to check if each term is attached to the current post

You can do that using has_term() which defaults to checking on the current post in the main loop, hence you can omit the third parameter (the post ID).

So for example in your case:

$class = has_term( $term->term_id, $term->taxonomy ) ? 'active' : ''; // like this
//$class = has_term( $term->term_id, 'package' ) ? 'active' : '';     // or this

echo '<li class="' . $class . '">' . $term->name . '</li>';

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论