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

如何通过短代码或functions.php在Woocommerce付款完成后显示已支付总金额?

WooCommerce 付款成功页显示已支付总金额的解决方案

问题分析

你之前的尝试未生效,核心原因有两个:

  • 自定义模板payment-successful.php未与WooCommerce的「订单已收到」页面绑定,系统仍在使用默认模板
  • 模板内的$order变量未正确初始化,无法读取订单金额数据

方案一:短代码实现(灵活易用)

直接在主题的functions.php中添加以下代码,创建可调用的短代码,之后可在订单感谢页或任意页面插入[display_order_total]显示已支付总金额:

// 创建显示订单总金额的短代码
add_shortcode('display_order_total', 'wc_display_order_total_shortcode');
function wc_display_order_total_shortcode() {
    // 仅在订单已收到页生效
    if (!is_order_received_page()) return;

    // 获取当前订单ID
    $order_id = wc_get_order_id_by_order_key( $_GET['key'] );
    $order = wc_get_order( $order_id );

    if (!$order || !$order->has_status('completed') && !$order->has_status('processing')) {
        return '';
    }

    // 返回格式化后的总金额
    return '<div class="order-total-display">
                <p><strong>已支付总金额:</strong>' . $order->get_formatted_order_total() . '</p>
            </div>';
}

使用方法:

  • 进入WordPress后台「页面」,找到WooCommerce自动创建的「订单已收到」页面
  • 编辑页面,在内容中插入短代码[display_order_total]即可

方案二:直接修改默认订单感谢页(无需自定义模板)

如果不想用短代码,可通过钩子直接在默认感谢页添加总金额,无需修改模板文件。在functions.php中添加以下代码:

// 在订单感谢页底部添加已支付总金额
add_action('woocommerce_thankyou', 'wc_show_paid_total_on_thankyou', 10, 1);
function wc_show_paid_total_on_thankyou($order_id) {
    $order = wc_get_order($order_id);
    
    if (!$order || !$order->is_paid()) {
        return;
    }

    echo '<div class="paid-total-notice" style="margin-top:20px;padding:15px;background:#f0f8ff;border-radius:4px;">
            <h4>已支付确认</h4>
            <p>您已成功支付:<strong>' . $order->get_formatted_order_total() . '</strong></p>
          </div>';
}

这段代码会自动在默认订单感谢页底部显示已支付金额,无需额外设置。


修复你之前的自定义模板问题

如果坚持使用自定义模板payment-successful.php,需按以下步骤修正:

步骤1:修正模板代码(初始化$order变量)

将模板内的代码替换为以下内容(修复$order未定义问题):

<?php
if (!defined('ABSPATH')) {
    exit;
}

/*
Template Name: Payment Success
*/

// 获取当前订单ID
$order_id = isset($_GET['order_id']) ? absint($_GET['order_id']) : 0;
$order = wc_get_order($order_id);

// 如果没有订单ID,尝试通过订单key获取
if (!$order && isset($_GET['key'])) {
    $order_id = wc_get_order_id_by_order_key($_GET['key']);
    $order = wc_get_order($order_id);
}
?>

<div class="woocommerce-order">
    <?php if ($order) : ?>
        <?php if ($order->has_status('failed')) : ?>
            <p class="woocommerce-notice woocommerce-notice--error woocommerce-thankyou-order-failed"><?php _e('很遗憾,您的订单无法完成,银行/商户已拒绝交易,请重新尝试支付。', 'woocommerce'); ?></p>
            <p class="woocommerce-notice woocommerce-notice--error woocommerce-thankyou-order-failed-actions">
                <a href="<?php echo esc_url($order->get_checkout_payment_url()); ?>" class="button pay"><?php _e('重新支付', 'woocommerce') ?></a>
                <?php if (is_user_logged_in()) : ?>
                    <a href="<?php echo esc_url(wc_get_page_permalink('myaccount')); ?>" class="button pay"><?php _e('我的账户', 'woocommerce'); ?></a>
                <?php endif; ?>
            </p>
        <?php else : ?>
            <p class="woocommerce-notice woocommerce-notice--success woocommerce-thankyou-order-received"><?php echo apply_filters('woocommerce_thankyou_order_received_text', __('感谢您的下单!我们已向您的邮箱发送了订单收据。', 'woocommerce'), $order); ?></p>
            <ul class="woocommerce-order-overview woocommerce-thankyou-order-details order_details">
                <li class="woocommerce-order-overview__order order">
                    <?php _e('订单编号:', 'woocommerce'); ?>
                    <strong><?php echo $order->get_order_number(); ?></strong>
                </li>
                <li class="woocommerce-order-overview__date date">
                    <?php _e('下单日期:', 'woocommerce'); ?>
                    <strong><?php echo date_i18n(get_option('date_format'), $order->get_date_created()); ?></strong>
                </li>
                <li class="woocommerce-order-overview__total total">
                    <?php _e('已支付总金额:', 'woocommerce'); ?>
                    <strong><?php echo $order->get_formatted_order_total(); ?></strong>
                </li>
            </ul>
        <?php endif; ?>
        <p>由于这是您的首单,我们为您提供10%的专属折扣,下次下单时使用优惠券码 <strong>WELCOME10</strong> 即可享受优惠。</p>
        <?php do_action('woocommerce_thankyou_' . $order->get_payment_method(), $order->get_id()); ?>
        <?php do_action('woocommerce_thankyou', $order->get_id()); ?>
    <?php else : ?>
        <p class="woocommerce-notice woocommerce-notice--success woocommerce-thankyou-order-received"><?php echo apply_filters('woocommerce_thankyou_order_received_text', __('感谢您的订单,我们已收到。', 'woocommerce'), null); ?></p>
    <?php endif; ?>
</div>

步骤2:绑定模板到订单已收到页

  • 进入WordPress后台「页面」,找到「订单已收到」页面
  • 编辑页面,在右侧「页面属性」的「模板」下拉菜单中选择你创建的「Payment Success」模板
  • 更新页面即可生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 00:40:42