显示分类法列表,只有它们是分层的

时间:2015-03-02 13:02:14

标签: php wordpress breadcrumbs custom-taxonomy

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

下面的代码目前有效但显示了所有分类法,但是我无法检查分类法是否在分层次之前是否已经分层。

我知道有一个运行此检查的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 );
}

1 个答案:

答案 0 :(得分:1)

如果我理解你的正确,你就不能像以下那样测试分类:

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[] = " ";
        }
    }
}

当您使用&#39;对象&#39;作为第二个参数:

get_object_taxonomies( $post_type, 'objects' );

你得到的是一系列分类学对象,而不仅仅是分类学名称(另一种选择)。分类对象具有属性&#34; hierarchical&#34;这表明该分类是否是分层的。您可以对此进行测试,以选择所需的分类法(分层或非分层)。