php - WooCommerce category tree with all products -


i need display category tree , full list of products under each category.

i used wp_query full list of products still unable show categories/sub-categories , list related products under each of them. looking way require least possible queries database.

any help? (no html or jquery needed, need result array)

the final result this.

subcat 1

----- product 1

----- product 2

----- subcategory1 of subcat 1

-------- product 1

-------- product 2

-------- product 3

subcat 2

----- product 1

----- product 2

----- product 3

    <?php     // remove breadcrumb if needed     $post_id = yiw_post_id();     if( get_post_meta( $post_id, '_show_breadcrumbs_page', true ) == 'no' ) {         remove_action( 'woocommerce_before_main_content', 'woocommerce_breadcrumb', 20, 0 );     }      if( get_post_meta( $post_id, '_slogan_page', true ) ) {         get_template_part('slogan');     }     /**      * woocommerce_before_main_content hook      *      * @hooked woocommerce_output_content_wrapper - 10 (outputs opening divs content)      * @hooked woocommerce_breadcrumb - 20      */     do_action('woocommerce_before_main_content'); ?>      <h1 class="page-title"><?php if( get_post_meta( yiw_post_id(), '_show_title_page', true ) == 'yes' ) woocommerce_page_title(); ?></h1>      <div class="clear"></div>      <?php if ( is_tax() && get_query_var( 'paged' ) == 0 ) : ?>         <?php echo '<div class="term-description">' . yiw_addp( term_description() ) . '</div>'; ?>     <?php elseif ( ! is_search() && get_query_var( 'paged' ) == 0 && ! empty( $shop_page ) && is_object( $shop_page ) ) : ?>         <?php echo '<div class="page-description">' . apply_filters( 'the_content', $shop_page->post_content ) . '</div>'; ?>     <?php endif; ?>      <?php if ( have_posts() ) : ?>         <?php         $args = array(             'taxonomy' => 'product_cat',         );          $cats = get_categories($args);          foreach ( $cats $cat ):             if ( !$cat->parent ):                 echo '<div class="clear"></div><h1>' . $cat->name . '</h1>';                  // display products directly associated product category todo: display direct products                 $args = array( 'post_type' => 'product', 'posts_per_page' => -1, 'product_cat' => $cat->slug, 'tax_query' => array( array( 'taxonomy' => 'product_cat', 'field' => 'slug', 'terms' => $cat->slug, 'include_children' => false  ) ) );                  $wp_query = new wp_query( $args );                  ?>                 <?php                 /**                 * woocommerce_pagination hook                 *                 * @hooked woocommerce_pagination - 10                 * @hooked woocommerce_result_count - 20                 * @hooked woocommerce_catalog_ordering - 30                 */                 do_action( 'woocommerce_before_shop_loop' );                 ?>                  <?php woocommerce_product_loop_start(); ?>                  <?php woocommerce_product_subcategories(); $woocommerce_loop['loop'] = 0; $woocommerce_loop['columns'] = 0; ?>                  <?php while ( have_posts() ) : the_post(); ?>                      <?php woocommerce_get_template_part( 'content', 'product' ); ?>                  <?php endwhile; // end of loop. ?>                  <?php                                    // children product categories                 $subcats = get_categories( array( 'hide_empty' => 0, 'parent' => $cat->term_id, 'taxonomy' => 'product_cat' ) );                  if ( count($subcats) > 0 ):                     $original_query = $wp_query;                      foreach ( $subcats $subcat ):                         set_query_var('category_header_level', 2);                         set_query_var('category', $subcat);                         woocommerce_get_template_part( 'archive-product-child-category', 'loop' );                      endforeach;                     $wp_query = null;                     $wp_query = $original_query;                     wp_reset_postdata();                  endif;                 else:                 /*  $args = array( 'post_type' => 'product', 'posts_per_page' => -1, 'product_cat' => $cat->slug );                     $wp_query = new wp_query( $args );                     ?>                     <?php                     /**                     * woocommerce_pagination hook                     *                     * @hooked woocommerce_pagination - 10                     * @hooked woocommerce_result_count - 20                     * @hooked woocommerce_catalog_ordering - 30                     */                 /*  do_action( 'woocommerce_before_shop_loop' );                     ?>                      <?php woocommerce_product_loop_start(); ?>                      <?php woocommerce_product_subcategories(); $woocommerce_loop['loop'] = 0; $woocommerce_loop['columns'] = 0; ?>                      <?php while ( have_posts() ) : the_post(); ?>                          <?php woocommerce_get_template_part( 'content', 'product' ); ?>                      <?php endwhile; // end of loop. ?>                     <?php */                  endif;         endforeach;         $wp_query = null;         $wp_query = $original_query;         wp_reset_postdata();         ?>           <?php woocommerce_product_loop_end(); ?>          <?php do_action('woocommerce_after_shop_loop'); ?>      <?php else : ?>          <?php if ( ! woocommerce_product_subcategories( array( 'before' => woocommerce_product_loop_start( false ), 'after' => woocommerce_product_loop_end( false ) ) ) ) : ?>             <div class="clear"></div>             <p><?php _e( 'no products found match selection.', 'woocommerce' ); ?></p>          <?php endif; ?>      <?php endif; ?>       <div class="clear"></div>      <?php         /**          * woocommerce_pagination hook          *          * @hooked woocommerce_pagination - 10          * @hooked woocommerce_catalog_ordering - 20          */         do_action( 'woocommerce_pagination' );     ?>  <?php     /**      * woocommerce_after_main_content hook      *      * @hooked woocommerce_output_content_wrapper_end - 10 (outputs closing divs content)      */     do_action('woocommerce_after_main_content'); ?>  <?php     /**      * woocommerce_sidebar hook      *      * @hooked woocommerce_get_sidebar - 10      */     do_action('woocommerce_sidebar'); ?> 

taken answer prafulla kumar sahu question


Comments

Popular posts from this blog

android - InAppBilling registering BroadcastReceiver in AndroidManifest -

python Tkinter Capturing keyboard events save as one single string -

sql server - Why does Linq-to-SQL add unnecessary COUNT()? -