如何通过短代码或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
相关产品推荐
相关产品推荐

