Woocommerce每个类别的产品循环分开

时间:2017-12-28 19:00:13

标签: php wordpress woocommerce

在我的Woocommerce商店的主商店页面(archive-product.php)上,我希望能够显示所有产品,但按类别分隔。所以我需要能够为每个产品类别创建一个循环。

对于视觉参考,这是我试图实现的目标:for reference

每个灰色块代表一个新类别,并将遍历该类别中的产品。

有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:1)

正如您在评论中提到的,如果您不需要任何分页,要列出按类别排列的所有产品,您可以先使用get_terms()功能循环浏览类别,并获取所需的任何信息在每次迭代(例如:类别名称)上,然后为每个类别创建一个自定义查询并显示查询的产品,这样的内容将为您提供您尝试做的事情:

<?php
foreach( get_terms( array( 'taxonomy' => 'product_cat' ) ) as $category ) :
    $products_loop = new WP_Query( array(
        'post_type' => 'product',

        'showposts' => -1,

        'tax_query' => array_merge( array(
            'relation'  => 'AND',
            array(
                'taxonomy' => 'product_cat',
                'terms'    => array( $category->term_id ),
                'field'   => 'term_id'
            )
        ), WC()->query->get_tax_query() ),

        'meta_query' => array_merge( array(

            // You can optionally add extra meta queries here

        ), WC()->query->get_meta_query() )
    ) );

?>
    <h2 class="category-title"><?php echo $category->name; ?></h2>

    <?php
    while ( $products_loop->have_posts() ) {
        $products_loop->the_post();
        /**
         * woocommerce_shop_loop hook.
         *
         * @hooked WC_Structured_Data::generate_product_data() - 10
         */
        do_action( 'woocommerce_shop_loop' );
        wc_get_template_part( 'content', 'product' );
    }
    wp_reset_postdata(); ?>
<?php endforeach; ?>

答案 1 :(得分:0)

在您的网页模板上试用此代码。它将获得每个类别的Woocommerce单独产品循环的结果。

&#13;
&#13;
$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
  );
 $all_categories = get_categories( $args );
 foreach ($all_categories as $cat) {
    if($cat->category_parent == 0) {
        $category_id = $cat->term_id;       
        echo '<br /><a href="'. get_term_link($cat->slug, 'product_cat') .'">'. $cat->name .'</a>';
		
		
	//get product
		$args = array(
  'post_type'      => 'product', 
	'product_cat' => $cat->name,
  'posts_per_page' => $count,
  'paged'          => $paged,
);
$query = new WP_Query( $args );

if ( $query->have_posts() ) {
    while ( $query->have_posts() ) { 
    $query->the_post();
        ?>
		<span class="title"><h2>  <?php the_title(); ?> </h2></span>
       	<?php
    }
    wp_reset_postdata();
}

	}
 }
&#13;
&#13;
&#13;