Woocommerce Product child category from current parent category

I am trying to show the WooCommerce product child category for the corresponding parent category. I have entered the product as following:

Product Category details that I entered

Read More

I am using the following code segment that displays the parent category list:

<?php
$IDbyNAME = get_term_by('name', $parent_cat_NAME, 'product_cat');

$product_cat_ID = $IDbyNAME->term_id;

   $args = array(
       'hierarchical' => 1,
       'show_option_none' => '',
       'hide_empty' => 0,
       'parent' => $product_cat_ID,
       'taxonomy' => 'product_cat'
   );

    $categories = get_categories($args);

    foreach ($categories as $category) {
        echo $category->name;
    }
?>

That is working well. Now I want to modify my code segment to display output as below:

Album
    English Songs
        Modern Songs
        Pop
        Rock

How can i do it?

Related posts

Leave a Reply

2 comments

  1. I have got the solve of this problem to show the category, Sub-category and product in woocommerce wordpress is as following,

    <?php
    $taxonomy = 'product_cat';
    $orderby = 'name';
    $show_count = 0; // 1 for yes, 0 for no
    $pad_counts = 0; // 1 for yes, 0 for no
    $hierarchical = 1; // 1 for yes, 0 for no
    $title = '';
    $empty = 0;
    
    $args = array(
    'taxonomy' => $taxonomy,
    'orderby' => $orderby,
    'show_count' => $show_count,
    'pad_counts' => $pad_counts,
    'hierarchical' => $hierarchical,
    'title_li' => $title,
    'hide_empty' => $empty
    );
    ?>
    
    <?php
    $all_categories = get_categories( $args );
    foreach ($all_categories as $cat)
    {
    
    if($cat->category_parent == 0)
    {
    $category_id = $cat->term_id;
    $thumbnail_id = get_woocommerce_term_meta( $cat->term_id, 'thumbnail_id', true );
    $image = wp_get_attachment_url( $thumbnail_id );
    echo "<ul class='category'><li>".$cat->name;
    $args2 = array(
    'taxonomy' => $taxonomy,
    'child_of' => 0,
    'parent' => $category_id,
    'orderby' => $orderby,
    'show_count' => $show_count,
    'pad_counts' => $pad_counts,
    'hierarchical' => $hierarchical,
    'title_li' => $title,
    'hide_empty' => $empty
    
    );
    
    $sub_cats = get_categories( $args2 );
    if($sub_cats)
    {
    
    foreach($sub_cats as $sub_category)
    {
    echo "<ul class='subcategory'>";
    if($sub_cats->$sub_category == 0)
    {
    echo "<li>".$sub_category->cat_name;
    
    ?>
    <?php
    /*echo "<pre>";
    print_r($sub_category);
    echo "</pre>";*/
    
    $args = array( 'post_type' => 'product','product_cat' => $sub_category->slug);
    $loop = new WP_Query( $args );
    echo "<ul class='products'>";
    while ( $loop->have_posts() ) : $loop->the_post(); global $product; ?> <li>
    <a href="<?php echo get_permalink( $loop->post->ID ) ?>" title="<?php echo esc_attr($loop->post->post_title ? $loop->post->post_title : $loop->post->ID); ?>">
    <?php the_title(); ?>
    </a></li>
    <?php endwhile; ?>
    </ul>
    <?php wp_reset_query(); ?>
    
    <?php
    }
    else
    {
    echo "</li></ul></li>";
    }
    echo "</ul>";
    }
    }
    else
    {
    $args = array( 'post_type' => 'product', 'product_cat' => $cat->slug );
    $loop = new WP_Query( $args );
    echo "<ul class='products'>";
    while ( $loop->have_posts() ) : $loop->the_post(); global $product; ?> <li>
    <a href="<?php echo get_permalink( $loop->post->ID ) ?>" title="<?php echo esc_attr($loop->post->post_title ? $loop->post->post_title : $loop->post->ID); ?>">
    <?php the_title(); ?>
    </a></li>
    <?php endwhile; ?>
    </ul></li></ul>
    <?php wp_reset_query();
    }
    }
    else
    {
    echo "</li></ul>";
    }
    }
    ?>
    
  2. First of all create an array of all the items

    $all = array(
            0 =>array(
                    "id"=> 1,
                    "name"=> "A",
                    "parent_id"=> 0
                ),
             1 =>array(
                    "id"=> 2,
                    "name"=> "B",
                    "parent_id"=> 1
                ),
             2 =>array(
                    "id"=> 3,
                    "name"=> "C",
                    "parent_id"=> 1
                ),
             3 =>array(
                    "id"=> 4,
                    "name"=> "D",
                    "parent_id"=> 2
                ),
            4 =>array(
                    "id"=> 5,
                    "name"=> "E",
                    "parent_id"=> 0
                ),
        );      
    

    Use this function to make recursive n times array from your items

    function makeMenu($items, $parentId)
    {
        $menu = array_filter($items, function ($item) use ($parentId) {
            return     $item['parent_id'] == $parentId;
        });
        foreach ($menu as &$item) 
        {
            $subItems = makeMenu($items, $item['id']);
            if (!empty($subItems)) 
            {
                $item['sub_menu'] = $subItems;
            }
        }
        return $menu;
    }
    

    Call function makeMenu($yourArray,$parentID)

    makeMenu($all,0); ////parent ID is 0 by default while calling..