ユーザーが属しているカスタム投稿タイプに属するすべてのカテゴリを表示しようとしています。
たとえば、この投稿は次のとおりです。 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
に相対的です)
単一のカスタム投稿テンプレートを使用している場合は、を使用して投稿が属する用語を取得できます。
$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 ) )
通常の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;
}