Woocommerce模板index.php中category__not_in参数失效求助
解决WooCommerce首页排除特定产品分类的问题
嘿,我看到你的问题了——刚接触PHP和WooCommerce的话,很容易踩这个分类法的坑!你用category__not_in参数无效的核心原因是:WooCommerce的产品分类是自定义分类法product_cat,而category__not_in是专门针对WordPress默认文章分类(category)的参数,对产品分类完全不起作用。
解决方案:改用tax_query过滤产品分类
把你代码里的category__not_in替换为tax_query,专门针对product_cat分类法设置排除规则。同时我还发现你代码里的分页部分有个小问题(用了全局$wp_query但实际是自定义查询),一起帮你修正了:
修改后的完整代码:
<section id="content"> <div class="container woocommerce"> <?php remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 ); global $woocommerce_loop, $woocommerce; $meta_query = $woocommerce->query->get_meta_query(); $args = array( 'post_type' => 'product', 'post_status' => 'publish', // 替换category__not_in为tax_query 'tax_query' => array( array( 'taxonomy' => 'product_cat', 'field' => 'term_id', 'terms' => array(28), 'operator' => 'NOT IN', ), ), 'ignore_sticky_posts' => 1, 'post__not_in' => $slider_arr, 'posts_per_page' => 9, 'paged' => ( get_query_var('paged') ? get_query_var('paged') : 1), ); $products = new WP_Query( $args ); if ( $products->have_posts() ) : $x = 0; ?> <div id="posts_cont"> <?php while ( $products->have_posts() ) : $products->the_post(); ?> <?php woocommerce_get_template_part( 'content', 'product-home' ); ?> <?php if ($x == 2) { echo '<div class="home_small_box clear"></div>'; $x = -1; } ?> <?php $x++; endwhile; ?> </div><!--//posts_cont--> <div class="load_more_cont"> <div align="center"><div class="load_more_text"> <?php ob_start(); next_posts_link('LOAD MORE PRODUCT', $products->max_num_pages); // 这里传入自定义查询的max_num_pages $buffer = ob_get_contents(); ob_end_clean(); if(!empty($buffer)) echo $buffer; ?> </div></div> </div><!--//load_more_cont--> <?php // 用自定义查询的max_num_pages,而不是全局$wp_query $max_pages = $products->max_num_pages; ?> <div id="max_pages_id" style="display: none;"><?php echo $max_pages; ?></div> <?php endif; wp_reset_postdata(); ?> <div class="clear"></div> </div><!--//container-->
关键修改点说明:
- 替换参数:删除
'category__not_in' => array( 28 ),添加tax_query数组,指定分类法为product_cat,排除ID28的分类。 - 分页修正:
next_posts_link第二个参数要传入自定义查询$products->max_num_pages,同时$max_pages也要用$products->max_num_pages,不然加载更多会和全局查询混淆,导致分页错误。
为什么原来的参数无效?
WordPress里的分类分为两种:
- 默认文章分类:分类法名称是
category,对应参数category__not_in、category__in等。 - 自定义分类法:WooCommerce的产品分类是
product_cat,必须用tax_query来进行过滤,这是新手最容易混淆的点之一。
这样修改后,就能正确排除ID为28的产品分类了,分页功能也能正常工作~
内容的提问来源于stack exchange,提问作者Stephan
相关产品推荐
相关产品推荐

