如何隐藏指定WooCommerce分类商品,却保留其关联商品展示?
实现WooCommerce指定分类隐藏且关联商品正常显示的方案
完全可以实现这个需求,最佳方式是通过WooCommerce提供的查询钩子定制产品查询逻辑,既能精准隐藏指定分类在目标页面的内容,又不会影响关联商品的正常展示。
核心思路
仅在店铺列表页、分类页面、站内搜索结果页这三个场景下排除指定分类的产品;产品详情页的关联商品查询不受此规则限制,确保关联商品正常显示。
具体实现步骤
获取要隐藏的分类ID
进入WooCommerce后台「产品-分类」页面,点击目标分类进入编辑页,从浏览器地址栏中找到term_id参数值(比如地址栏tag_id=12里的12),记录下两个分类的ID。添加产品查询过滤代码
将以下代码添加到当前主题的functions.php文件中,或使用「Code Snippets」这类代码片段插件管理(推荐后者,避免主题更新丢失代码):add_filter( 'woocommerce_product_query_tax_query', 'exclude_specific_cats_from_target_pages', 10, 2 ); function exclude_specific_cats_from_target_pages( $tax_query, $query ) { // 替换为你需要隐藏的分类ID,多个用数组形式 $excluded_cat_ids = array( 12, 34 ); // 仅在目标页面应用排除规则 if ( is_shop() || is_product_category() || is_search() ) { $tax_query[] = array( 'taxonomy' => 'product_cat', 'field' => 'term_id', 'terms' => $excluded_cat_ids, 'operator' => 'NOT IN', ); } return $tax_query; }隐藏导航菜单中的指定分类(可选)
如果店铺导航菜单包含自动生成的产品分类,需额外添加代码隐藏这两个分类:add_filter( 'wp_get_nav_menu_items', 'remove_excluded_cats_from_menu', 10, 3 ); function remove_excluded_cats_from_menu( $items, $menu, $args ) { $excluded_cat_ids = array( 12, 34 ); // 与上面的分类ID保持一致 foreach ( $items as $key => $item ) { if ( $item->object === 'product_cat' && in_array( $item->object_id, $excluded_cat_ids ) ) { unset( $items[$key] ); } } return $items; }
效果验证
设置完成后:
- 店铺列表页、分类页面、搜索结果中不会出现指定分类下的产品,也不会显示这两个分类本身;
- 当这些分类下的产品被设置为其他产品的关联商品时,在产品详情页的关联商品区域会正常展示。
注意事项
- 若习惯用分类slug而非ID,可将代码中的
'field' => 'term_id'改为'field' => 'slug','terms'的值换成分类slug数组(比如array( 'hidden-cat-1', 'hidden-cat-2' )); - 修改主题文件前建议备份,使用代码片段插件更安全便捷。
内容的提问来源于stack exchange,提问作者Mathew Smith
相关产品推荐
相关产品推荐

