显示分类列表,仅当它们是分层的时

Display a list of taxonomies, only if they are hierarchical

我正在尝试显示自定义 post 类型所在的分类列表,不包括那些不分层的。

下面的代码目前有效,但显示了所有分类法,但是我无法在 运行 通过循环之前检查分类法是否是分层的。

我知道有一个运行此检查的 WordPress 函数,但由于我通常在前端工作,所以我似乎无法弄清楚将它放在哪里才能使其生效:

is_taxonomy_hierarchical( $taxonomy )

以下是我用来输出分类列表的函数:

// get taxonomies terms links
function custom_taxonomies_terms_links(){

  // get post by post id
  $post = get_post( $post->ID );

  // get post type by post
  $post_type = $post->post_type;

  // get post type taxonomies
  $taxonomies = get_object_taxonomies( $post_type, 'objects' );

  $out = array();

    echo '<a href="';
    echo '/';
    echo '">';
    echo 'Home';
    echo "</a> / ";

  foreach ( $taxonomies as $taxonomy_slug => $taxonomy ){

    // get the terms related to post
    $terms = get_the_terms( $post->ID, $taxonomy_slug );

    if (!empty( $terms )) {     
      foreach ( $terms as $term ) {
        $out[] =
          '<a href="'
        .    get_term_link( $term->slug, $taxonomy_slug ) .'">'
        .    $term->name
        . "</a> / ";
      }
      $out[] = " ";
    }
  }
return implode('', $out );
}

如果我理解正确的话,你不能像下面这样测试分类法吗:

foreach ( $taxonomies as $taxonomy_slug => $taxonomy ){

    if ($taxonomy->hierarchical) {
        // get the terms related to post
        $terms = get_the_terms( $post->ID, $taxonomy_slug );

        if (!empty( $terms )) {     
           foreach ( $terms as $term ) {
               $out[] =
              '<a href="'
             .    get_term_link( $term->slug, $taxonomy_slug ) .'">'
             .    $term->name
             . "</a> / ";
           }
           $out[] = " ";
        }
    }
}

当您使用 'objects' 作为第二个参数时:

get_object_taxonomies( $post_type, 'objects' );

你得到的是一组分类对象,而不是仅仅分类名称(另一个选项)。分类对象有一个 属性 "hierarchical" 指示该分类是否是分层的。您可以对此进行测试以选择您想要的分类法类型(分层或非分层)。