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
Post a Comment