2017-08-15 53 views
0

我需要在每个类别下显示类别树和产品的完整列表。包含所有产品的WooCommerce类别树

我用WP_Query获取产品的完整列表,但仍然无法显示类别/子类别,并在其中的每个下面列出相关产品。我正在寻找一种对数据库的查询要求最少的方法。

任何帮助? (不需要html或jquery,我只需要结果数组)

回答

0

最终结果将是这样的。

SUBCAT 1

-----产品1

-----产品2

----- SUBCAT 1

的子类别1 ----- ---产品1

--------产品2

--------产品3

SUBCAT 2

-----产品1

-----产品2

-----产品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 for the 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 as $cat): 
      if (!$cat->parent): 
       echo '<div class="clear"></div><h1>' . $cat->name . '</h1>'; 

       // display products which are directly associated with the product category TODO: display only 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 the loop. ?> 

       <?php     
       // get 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 as $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 the 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 which match your 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 for the content) 
    */ 
    do_action('woocommerce_after_main_content'); 
?> 

<?php 
    /** 
    * woocommerce_sidebar hook 
    * 
    * @hooked woocommerce_get_sidebar - 10 
    */ 
    do_action('woocommerce_sidebar'); 
?> 

从答案两者Prafulla Kumar Sahu对此question

相关问题