web-dev-qa-db-ja.com

カスタム投稿タイプの親カテゴリを取得する

ユーザーが属しているカスタム投稿タイプに属するすべてのカテゴリを表示しようとしています。

たとえば、この投稿は次のとおりです。 http://bit.ly/1ANisxN このページカテゴリに属する​​カスタム投稿の種類です。 http://bit.ly/1FYscKh

ご覧のとおり、ページカテゴリには子カテゴリが表示されています。これは、カスタム投稿にしたいものです。i.imgur.com/vk4K31T.png

これが私のカスタム投稿で親カテゴリを表示するために私が試したことです。

<?php echo get_category_parents() ?>

ところで、これはカテゴリページがそのサブカテゴリを反映している方法です:

<?php  
$terms = get_terms( 'btp_work_category' ); 
   foreach ( $terms as $term ) {
       ?>
       <li><a href="#" data-filter=".filter-<?php echo $term->term_id; ?>"><?php echo $term->name; ?></a></li>
       <?php  
  }
?>      

これを行う方法について何かアイデアはありますか?

たとえば、このカテゴリ構造:

エレクトロニクス(トップカテゴリー)

  • カメラ(サブカテゴリー)

    • 投稿
  • テレビ(サブカテゴリ)

    • 投稿
  • 携帯電話(サブカテゴリー)

    • 投稿

それで私がcameras投稿をしているなら、私はそれのトップカテゴリとそのサブカテゴリを表示したいです(それらはすべて `Electronics 'の下にあるのでcamerasに相対的です)

1
wp richard

単一のカスタム投稿テンプレートを使用している場合は、を使用して投稿が属する用語を取得できます。

$terms = get_the_terms( get_the_ID(), 'btp_work_category' );

それからあなたは親の用語を決定し、その子と一緒に表示する必要があります。

以下のコードは、投稿が1つの最上位カテゴリ(用語)に属し、分類法ツリーのレベルが2つ以下であることを前提としています。

$terms = get_the_terms( get_the_ID(), 'btp_work_category' );
if ( ! empty( $terms ) ) :
  echo "<ul>\n";
  // Parent term detection and display
  $term = array_pop( $terms );
  $parent_term = ( $term->parent ? get_term( $term->parent, 'btp_work_category' ) : $term );
  echo "<li>\n";
  echo '<a href="' . get_term_link( $parent_term, 'btp_work_category' ) . '">' . $parent_term->name . '</a>';
  // Getting children
  $child_terms = get_term_children( $parent_term->term_id, 'btp_work_category' );
  if ( ! empty( $child_terms ) ) :
    echo "\n<ul>\n";
    foreach ( $child_terms as $child_term_id ) :
      $child_term = get_term_by( 'id', $child_term_id, 'btp_work_category' );
      echo '<li><a href="' . get_term_link( $child_term, 'btp_work_category' ) . '">' . $child_term->name . "</a></li>\n";
    endforeach;
    echo "</ul>\n";
  endif; // ( ! empty( $child_terms ) )
  echo "</li>\n";
  echo "</ul>\n";
endif; // ( ! empty( $terms ) )
1

通常のWPの投稿のようにCPTが親カテゴリを持っていないという事実にもかかわらず、これはちょっとうまくいくはずのものです...

function get_cpt_parent_cat_aka_taxonomy() {
    global $post;
    $parent_tax_name = 'Undefined parent taxonomy!';
    $obj_taxonomies = get_object_taxonomies( $post->post_type, 'objects' );
    $slugs = array();
    if( !empty( $obj_taxonomies ) ) {
        foreach ( $obj_taxonomies as $key => $tax ) {
            if( $tax->show_ui === true && $tax->public === true && $tax->hierarchical !== false ) {
                array_Push( $slugs, $tax->name );
            }
        }
        $terms = wp_get_post_terms( $post->ID, $slugs );
        $term = get_term( $terms[ 0 ]->term_id, $terms[ 0 ]->taxonomy );
        $parent_tax_name = $term->name;
    }
    return $parent_tax_name;
}
0
Dameer