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

如何在WooCommerce购物车/结账页替换优惠券金额为自定义字符串

解决WooCommerce优惠券显示自定义文本的问题

嘿,这个需求不难实现!不过先提醒你:直接修改主题自带的cart.php文件可不是最佳实践——下次主题更新时,你的修改会被直接覆盖掉。我给你两种更稳妥的方案,优先推荐第一种哦:

方案一:使用WooCommerce钩子(推荐)

WooCommerce提供了专门的钩子来修改优惠券的显示内容,不用碰模板文件,代码直接放在子主题的functions.php里就行,安全又省心。

添加这段代码到你的子主题functions.php中:

add_filter( 'woocommerce_cart_totals_coupon_html', 'custom_coupon_display_text', 10, 3 );
function custom_coupon_display_text( $html, $coupon, $discount_amount_html ) {
    // 获取优惠券的折扣类型和金额
    $discount_type = $coupon->get_discount_type();
    $discount_amount = $coupon->get_amount();
    
    // 根据折扣类型生成自定义文本
    if ( $discount_type === 'percent' ) {
        // 百分比折扣显示 "优惠券代码 - X% off"
        $custom_text = sprintf( '%s - %s%% off', $coupon->get_code(), $discount_amount );
    } else {
        // 固定金额折扣的自定义文本,可按需修改(比如显示 "-$X off")
        $custom_text = sprintf( '%s - %s off', $coupon->get_code(), wc_price( $discount_amount ) );
    }
    
    // 返回修改后的HTML结构,和原页面结构保持一致
    return '<tr class="cart-discount coupon-' . esc_attr( $coupon->get_code() ) . '">
        <th>' . __( 'Coupon:', 'woocommerce' ) . '</th>
        <td data-title="' . esc_attr( __( 'Coupon', 'woocommerce' ) ) . '">
            ' . $custom_text . '
            <a href="' . esc_url( wc_get_cart_remove_coupon_url( $coupon->get_code() ) ) . '" class="woocommerce-remove-coupon" data-coupon="' . esc_attr( $coupon->get_code() ) . '">' . __( '[Remove]', 'woocommerce' ) . '</a>
        </td>
    </tr>';
}

代码说明:

  • 这个钩子woocommerce_cart_totals_coupon_html会同时作用于购物车页面和结账页面,一次修改两处生效。
  • 代码会自动判断优惠券是百分比折扣还是固定金额折扣,分别生成对应的自定义文本。
  • 你可以根据自己的需求调整$custom_text里的格式,比如改成中文的“立减X%”或者“优惠XX元”。

方案二:修改子主题的模板文件

如果你更习惯直接改模板,一定要用子主题来操作,避免主题更新丢失修改。步骤如下:

  1. 先创建并启用你的子主题(如果还没做的话)。

  2. 复制主题目录下的woocommerce/cart/cart.php文件,粘贴到子主题的对应目录(子主题里要先建woocommerce/cart文件夹)。

  3. 打开子主题里的cart.php,找到显示优惠券的这段代码(大概在购物车总计区域):

    foreach ( WC()->cart->get_coupons() as $code => $coupon ) {
        ?>
        <tr class="cart-discount coupon-<?php echo esc_attr( sanitize_title( $code ) ); ?>">
            <th><?php esc_html_e( 'Coupon:', 'woocommerce' ); ?></th>
            <td data-title="<?php esc_attr_e( 'Coupon', 'woocommerce' ); ?>">
                <?php wc_cart_totals_coupon_html( $coupon ); ?>
            </td>
        </tr>
        <?php
    }
    
  4. 把里面的<?php wc_cart_totals_coupon_html( $coupon ); ?>替换成下面的代码:

    <?php
    $discount_type = $coupon->get_discount_type();
    $discount_amount = $coupon->get_amount();
    if ( $discount_type === 'percent' ) {
        echo esc_html( sprintf( '%s - %s%% off', $coupon->get_code(), $discount_amount ) );
    } else {
        echo esc_html( sprintf( '%s - %s off', $coupon->get_code(), wc_price( $discount_amount ) ) );
    }
    ?>
    <a href="<?php echo esc_url( wc_get_cart_remove_coupon_url( $code ) ); ?>" class="woocommerce-remove-coupon" data-coupon="<?php echo esc_attr( $code ); ?>"><?php esc_html_e( '[Remove]', 'woocommerce' ); ?></a>
    
  5. 结账页面同步修改:如果要让结账页面也生效,需要复制主题里的woocommerce/checkout/review-order.php到子主题对应目录,找到类似的优惠券显示代码,做同样的替换。

注意事项:

  • 每次主题更新后,要检查原主题的模板文件有没有变化,如果有,需要同步更新子主题里的模板代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:35:49