如何移除指定WooCommerce产品分类页面侧边栏?现有代码无效
解决WooCommerce特定产品分类页面移除侧边栏问题(兼容WOOF插件)
原代码失效的核心原因是使用了body_class钩子——这个钩子触发时机太晚,无法在侧边栏渲染前完成移除操作。另外WOOF Products Filter插件可能会重新渲染侧边栏,需要调整钩子优先级和判断逻辑。
以下是修正后的可用代码:
add_action('template_redirect', 'my_remove_specific_category_sidebar'); function my_remove_specific_category_sidebar() { // 指定要移除侧边栏的产品分类slug数组 $target_categories = array('roset', 'plank'); // 覆盖商店页、目标分类页,以及WOOF过滤后的目标分类结果页 if (is_shop() || is_product_category($target_categories) || (isset($_GET['woof']) && has_term($target_categories, 'product_category'))) { // 移除默认WooCommerce侧边栏 remove_action('woocommerce_sidebar', 'woocommerce_get_sidebar', 10); // 移除WOOF插件添加的侧边栏组件(若插件有自定义渲染逻辑) remove_action('woocommerce_sidebar', 'woof_show_widget', 10); } }
关键细节说明:
- 改用
template_redirect钩子:该钩子触发时机足够早,能在侧边栏渲染前完成移除操作。 - 兼容WOOF过滤场景:添加
isset($_GET['woof']) && has_term(...)判断,确保用户用WOOF筛选目标分类产品时,侧边栏也会被移除。 - 优先级调整:如果WOOF插件用了相同优先级添加侧边栏,可以把
remove_action的优先级改为11(比如remove_action(..., 11)),确保覆盖插件的动作。 - 分类slug验证:确认
$target_categories数组里的是产品分类的slug(不是显示名称),避免判断逻辑失效。
将这段代码添加到主题的functions.php文件,或使用自定义代码插件(如Code Snippets)即可生效。
内容的提问来源于stack exchange,提问作者Dmitry
相关产品推荐
相关产品推荐

