如何在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元”。
方案二:修改子主题的模板文件
如果你更习惯直接改模板,一定要用子主题来操作,避免主题更新丢失修改。步骤如下:
先创建并启用你的子主题(如果还没做的话)。
复制主题目录下的
woocommerce/cart/cart.php文件,粘贴到子主题的对应目录(子主题里要先建woocommerce/cart文件夹)。打开子主题里的
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 }把里面的
<?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>结账页面同步修改:如果要让结账页面也生效,需要复制主题里的
woocommerce/checkout/review-order.php到子主题对应目录,找到类似的优惠券显示代码,做同样的替换。
注意事项:
- 每次主题更新后,要检查原主题的模板文件有没有变化,如果有,需要同步更新子主题里的模板代码。
内容的提问来源于stack exchange,提问作者Abilash Erikson
相关产品推荐
相关产品推荐

