未选择分类时如何获取所有WooCommerce产品?调整terms参数方法
解决方案
要实现未选择分类时展示所有产品,核心是动态控制是否添加分类过滤条件,而不是强行设置terms参数——如果terms传入无效值(比如0),会导致查询返回空结果,完全不符合需求。
具体修改思路和代码如下:
- 先初始化基础查询参数,暂不包含
tax_query - 仅当
$_POST['category']存在有效值时,再添加分类过滤的tax_query条件
// 初始化基础查询参数 $args = array( 'post_type' => 'product', 'numberposts' => -1, 'post_status' => 'publish', 'fields' => 'ids', ); // 检查是否有有效的分类ID传入 $category_id = intval($_POST['category']); if ($category_id > 0) { // 仅当分类ID有效时,添加tax_query过滤条件 $args['tax_query'] = array( array( 'taxonomy' => 'product_cat', 'field' => 'term_id', 'terms' => $category_id, 'operator' => 'IN' ) ); } $id_posts = get_posts($args);
关键说明
- 未选择分类时,
$_POST['category']为空,经intval转换后为0,此时不会添加tax_query,查询会返回所有已发布的产品 - 选择有效分类(ID大于0)时,才会启用分类过滤,只返回对应分类下的产品
- 这种写法避免了无效
tax_query导致的空结果问题,同时保证两种场景的逻辑正确性
内容的提问来源于stack exchange,提问作者pasra
相关产品推荐
相关产品推荐

