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

如何在WooCommerce订单完成页为商品添加自定义折扣文本?

在WooCommerce订单完成页添加商品折扣文本的实现方案

嘿,这个需求完全可以搞定!WooCommerce提供了几个合适的钩子,能帮你在订单完成页(包括用户账户里的订单详情页)给每个带批量折扣的商品加上(10% discount)这样的文本。下面给你具体的实现思路和代码示例:

一、常用的钩子选项

1. 修改商品名称后添加文本:woocommerce_order_item_name

这个钩子可以直接修改订单中显示的商品名称,适合把折扣文本紧跟在商品名后面的场景。

add_filter( 'woocommerce_order_item_name', 'add_discount_text_to_order_items', 10, 3 );
function add_discount_text_to_order_items( $item_name, $item, $is_visible ) {
    // 只在订单完成页(order-received)和订单详情页(view-order)生效
    if ( is_wc_endpoint_url( 'order-received' ) || is_wc_endpoint_url( 'view-order' ) ) {
        // 从订单项元数据中获取之前保存的折扣百分比(后面会说怎么保存)
        $discount_percent = $item->get_meta( '_bulk_discount_percentage' );
        
        // 如果存在折扣值,就添加文本
        if ( ! empty( $discount_percent ) ) {
            $item_name .= ' (' . $discount_percent . '% discount)';
        }
    }
    return $item_name;
}

2. 在商品元数据后添加文本:woocommerce_order_item_meta_end

如果不想修改商品名称,想把折扣文本放在商品规格、数量等元数据的下方,用这个钩子更合适。

add_action( 'woocommerce_order_item_meta_end', 'add_discount_text_after_item_meta', 10, 4 );
function add_discount_text_after_item_meta( $item_id, $item, $order, $plain_text ) {
    if ( is_wc_endpoint_url( 'order-received' ) || is_wc_endpoint_url( 'view-order' ) ) {
        $discount_percent = $item->get_meta( '_bulk_discount_percentage' );
        
        if ( ! empty( $discount_percent ) ) {
            echo '<br><small style="color:#666;">(' . $discount_percent . '% discount)</small>';
        }
    }
}

二、关键:把折扣信息保存到订单项

要在订单页面获取到商品的折扣值,你需要在用户结账时,把批量折扣的信息保存到订单项的元数据里。可以用woocommerce_checkout_create_order_line_item钩子来实现:

add_action( 'woocommerce_checkout_create_order_line_item', 'save_bulk_discount_to_order_item', 10, 4 );
function save_bulk_discount_to_order_item( $item, $cart_item_key, $values, $order ) {
    // 这里替换成你实际计算批量折扣的逻辑,比如从购物车项中获取已计算好的折扣百分比
    // 假设你之前在woocommerce_before_calculate_totals里已经算出了该商品的折扣率
    $discount_percent = isset( $values['bulk_discount_percent'] ) ? $values['bulk_discount_percent'] : 0;
    
    if ( $discount_percent > 0 ) {
        // 保存元数据,第三个参数true表示不在前台默认显示(我们自己通过钩子控制显示)
        $item->add_meta_data( '_bulk_discount_percentage', $discount_percent, true );
    }
}

三、注意事项

  • 调整is_wc_endpoint_url的判断条件,可以控制文本显示的页面范围,比如只在订单完成页显示就保留is_wc_endpoint_url( 'order-received' )即可。
  • 如果你之前的折扣逻辑是基于金额而非百分比,只需把代码中的百分比替换成金额文本即可,比如$item_name .= ' ($10 discount)'。
  • 代码可以添加到你的主题functions.php文件,或者自定义插件中,避免主题更新丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:24:57