WooCommerce购物车为空时进度条消失但页脚图标列表也消失问题
问题分析与解决方案
你的代码问题出在:正则表达式会移除页面中所有带有elementor-widget-container类的div容器——Elementor的绝大多数组件(包括页脚图标列表)都会使用这个通用容器类,所以购物车为空时,这些组件会被一并删除。
修复方案
方案1:给进度条容器添加唯一类,精准匹配移除
- 在Elementor编辑器中,找到购物车进度条的Widget,进入「高级」选项,添加自定义CSS类(比如
cart-progress-bar-widget)。 - 修改主题代码为:
function remove_elementor_widget_container_if_cart_empty() { // 检查WooCommerce激活状态、当前页面是否为购物车、购物车是否为空 if ( class_exists('WooCommerce') && is_cart() && WC()->cart->is_empty() ) { add_filter('the_content', 'remove_cart_progress_bar_container'); } } function remove_cart_progress_bar_container($content) { // 仅移除包含自定义类的进度条容器 $content = preg_replace('/<div class="elementor-widget-container">.*?<div class="cart-progress-bar-widget".*?<\/div>.*?<\/div>/s', '', $content); return $content; } add_action('wp', 'remove_elementor_widget_container_if_cart_empty');
方案2:用Elementor内置条件显示(推荐,无需代码)
直接在进度条Widget的「高级」→「条件」设置中,添加规则:
- 条件:购物车内容 → 不为空
这样购物车为空时,进度条自动隐藏,不会影响其他组件。
方案3:匹配Widget的唯一ID移除
每个Elementor Widget都有唯一ID(比如elementor-widget-123),你可以在页面源码中找到进度条Widget的ID,然后修改正则:
function remove_cart_progress_bar_container($content) { // 替换为你的进度条Widget实际ID $content = preg_replace('/<div id="elementor-widget-123" class="elementor-widget.*?<div class="elementor-widget-container">.*?<\/div>.*?<\/div>/s', '', $content); return $content; }
内容的提问来源于stack exchange,提问作者Max Benen
相关产品推荐
相关产品推荐

