web-dev-qa-db-ja.com

現在の投稿の親カテゴリのサブカテゴリを取得するには、get_term_childrenを使用してください。

私のWooCommerceテーマでは、「Brands」というルートカテゴリを作成し、次に各商品について、そのブランドを「Brands」の親カテゴリのサブカテゴリとして追加しました。

商品ページに現在の商品のブランドを表示したいです。

global $post;

// Get the brands ID from slug
$brands_id = get_term_by('slug', 'brands', 'product_cat');

// Get the children of that term
$termchildren = get_term_children( $brands_id, 'product_cat' );

// Loop through the children of 'brand' term to echo the name of the brand
foreach ( $termchildren as $child ) {
    $term = get_term_by( 'id', $child, 'product_cat' );
    echo '<a href="' . get_term_link( $child, 'product_cat' ) . '">' . $term->name . '</a>';
}

これは常に all のブランドを反映しています。この情報を入手して、現在の製品に関連付けられていないブランドを除外する方法を教えてください。

1
tommyf

get_term_children()はまったく必要ありません。必要なものを取得するためにget_the_terms()をループするだけです。

global $post;
$brands_id = get_term_by('slug', 'brands', 'product_cat');

$terms = get_the_terms($post->ID, 'product_cat');
foreach ($terms as $term) {
    if($term->parent === $brands_id->term_id) {
        echo $term->name;
        break;
    }
}
3
tommyf
$term_id       = get_term_by( 'slug', 'brands', 'product_cat' );
$taxonomy_name = 'product_cat';
$termchildren  = get_term_children( $term_id, $taxonomy_name );

echo '<ul>';
foreach ( $termchildren as $child ) {
    $term = get_term_by( 'id', $child, $taxonomy_name );
    echo '<li><a href="' . get_term_link( $child, $taxonomy_name ) . '">' . $term->name . '</a></li>';
}
echo '</ul>';
1

まず第一に私はここで同じ質問をしました、そして私は自分で答えを得ました:)

https://wordpress.stackexchange.com/questions/188839/wordpress-tags-and-hierarchy-parent-child-relation

これをどうやってやればいいのでしょうか。

    $taxonomies = array( 
        'brands'
    );

    $args = array(
        'orderby'           => 'name', 
        'order'             => 'ASC',
        'fields'            => 'all',
        'parent'            => '(parentID)',
        'hierarchical'      => true, 
        'child_of'          => 0
    ); 

    $terms = get_terms($taxonomies, $args);
    var_dump($terms);
    foreach ($terms as $term) {
        print '<h2 class="story-heading">'.$term->name.'</h2>';
    } 

もしあなたがすでに親カテゴリのIDを知っていれば、それをINTとして渡し、foreachサイクルに入れるだけで、親のすべての子用語(サブカテゴリ)が得られます。また、これを再利用する必要がある場合、同じクエリを複数回表示して異なるparent -> child用語を取得する必要がある場合は、関数を作成してそれをfunctions.phpに配置することをお勧めします。

function get_children_of_parent_terms($tax, $pid) {
  $taxonomies = $tax;

        $args = array(
            'orderby'           => 'name', 
            'order'             => 'ASC',
            'fields'            => 'all',
            'parent'            => $pid,
            'hierarchical'      => true, 
            'child_of'          => 0
        ); 

        $terms = get_terms($taxonomies, $args);
        var_dump($terms);
        foreach ($terms as $term) {
            print '<h2 class="story-heading">'.$term->name.'</h2>';
        }
   }

add_action('init','get_children_of_parent_terms');

そして、親の用語(category)から子を検索したいときはいつでも、タクソノミーの親カテゴリ名を$ taxとして、親IDを$ pidとして、この関数を呼び出すだけです。たとえば、echo get_children_of_parent_terms('brands','15');がID 15の用語のすべての子用語を出力する、ID 15の分類ブランドと親用語。

乾杯。

0
Mile Milosheski