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

如何在Astra主题的WooCommerce产品标签框显示折扣百分比而非促销

替换Astra主题WooCommerce产品标签的“促销”为折扣百分比

解决方案步骤

  • 第一步:移除Astra默认的“促销”标签
    Astra主题用专属函数渲染促销标签,先把默认标签移除,将以下代码添加到主题的functions.php文件或自定义代码插件中:

    add_action( 'init', 'remove_astra_sale_badge' );
    function remove_astra_sale_badge() {
        remove_action( 'woocommerce_before_shop_loop_item_title', 'astra_woocommerce_sale_flash', 10 );
        remove_action( 'woocommerce_before_single_product_summary', 'astra_woocommerce_sale_flash', 10 );
    }
    
  • 第二步:添加自定义折扣百分比标签
    新增自定义标签逻辑,自动计算并显示折扣百分比,代码如下:

    add_action( 'woocommerce_before_shop_loop_item_title', 'custom_astra_sale_percentage_badge', 10 );
    add_action( 'woocommerce_before_single_product_summary', 'custom_astra_sale_percentage_badge', 10 );
    
    function custom_astra_sale_percentage_badge() {
        global $product;
        
        // 仅对在售商品生效
        if ( ! $product->is_on_sale() ) return;
        
        // 兼容简单产品和可变产品
        if ( $product->is_type( 'simple' ) ) {
            $regular_price = (float) $product->get_regular_price();
            $sale_price = (float) $product->get_sale_price();
        } elseif ( $product->is_type( 'variable' ) ) {
            $min_regular_price = (float) $product->get_variation_regular_price( 'min', true );
            $min_sale_price = (float) $product->get_variation_sale_price( 'min', true );
            $regular_price = $min_regular_price;
            $sale_price = $min_sale_price;
        } else {
            return;
        }
        
        // 计算并输出折扣百分比
        if ( $regular_price > 0 ) {
            $percentage = round( ( ( $regular_price - $sale_price ) / $regular_price ) * 100 );
            echo '<span class="onsale">' . esc_html( '-' . $percentage . '%' ) . '</span>';
        }
    }
    
  • 第三步:样式适配(可选)
    如果新标签样式和Astra默认风格不符,可添加以下CSS调整(放到主题自定义CSS区域):

    .woocommerce ul.products li.product .onsale,
    .woocommerce div.product .onsale {
        background-color: #e74c3c;
        color: #fff;
        font-size: 12px;
        padding: 4px 8px;
        border-radius: 3px;
    }
    

原代码失效原因

之前的通用代码没有适配Astra主题的专属钩子——Astra用astra_woocommerce_sale_flash函数渲染促销标签,而非WooCommerce默认的woocommerce_show_product_sale_flash,因此直接修改默认钩子的代码无法覆盖主题原有逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 15:47:08