You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WooCommerce:替换Backorder商品的Sales徽章为Out Of Stock徽章

WooCommerce预售商品Sales徽章替换方案

针对你遇到的预售商品同时显示Sales和Out Of Stock徽章重叠的问题,给你两种解决思路:

方法一:从PHP层面重构徽章逻辑(彻底解决)

替换你现有的代码,用以下代码实现仅在非预售的促销商品显示Sales徽章,预售商品显示Out Of Stock徽章:

// 移除WooCommerce默认的Sales徽章钩子(覆盖列表页和详情页)
remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_show_product_loop_sale_flash', 10 );
remove_action( 'woocommerce_before_single_product_summary', 'woocommerce_show_product_sale_flash', 10 );

// 添加自定义徽章判断逻辑
add_action( 'woocommerce_before_shop_loop_item_title', 'custom_product_status_badge', 3 );
add_action( 'woocommerce_before_single_product_summary', 'custom_product_status_badge', 3 );

function custom_product_status_badge() {
    global $product;

    // 预售状态:显示Out Of Stock徽章
    if ( $product->is_on_backorder( 1 ) ) {
        echo '<span class="out-of-stock-badge" data-shape="type-3">' . esc_html__( 'Out Of Stock', 'woocommerce' ) . '</span>';
    } 
    // 非预售且促销状态:显示默认Sales徽章
    elseif ( $product->is_on_sale() ) {
        echo '<span class="onsale">' . esc_html__( 'Sale!', 'woocommerce' ) . '</span>';
    }
}

这段代码先移除了WooCommerce自带的Sales徽章输出逻辑,然后自定义判断:只有非预售的促销商品才显示Sales徽章,预售商品只显示你需要的Out Of Stock标签,从根源避免重叠。

方法二:CSS层面隐藏预售商品的Sales徽章(快速解决)

如果不想修改PHP代码,直接给主题的自定义CSS添加以下样式,通过CSS隐藏预售商品的Sales徽章:

/* 隐藏处于预售状态商品的Sales徽章 */
.product.onbackorder .onsale {
    display: none !important;
}

WooCommerce会自动给预售商品添加.onbackorder类,这段代码能精准定位并隐藏对应的Sales徽章(默认类为.onsale),让你的Out Of Stock徽章正常显示。


内容的提问来源于stack exchange,提问作者ELT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 14:56:29