求WooCommerce订阅订单首期月度Recurring Totals自定义短代码
WooCommerce订阅订单月度循环总计短代码解决方案
你需要展示订阅订单的首期月度循环付款金额,由于按比例计费导致常规订单小计/总计不准确,以下是修正后的可行代码及说明:
原代码问题分析
你之前的代码存在两个核心问题:
WC_Subscription::get_total()是实例方法,不能直接通过类名静态调用,必须基于具体的订阅对象使用- 代码没有获取对应订单/订阅的实例,也没有返回任何内容,所以无法输出结果
修正后的短代码
add_shortcode('wdm_recurring_totals', 'wmd_my_custom_function'); function wmd_my_custom_function($atts) { // 支持传入订单ID,默认取当前感谢页的订单ID $order_id = isset($atts['order_id']) ? intval($atts['order_id']) : get_query_var('order-received'); if (!$order_id) { return '无法获取订单信息'; } // 获取订单对象并验证是否包含订阅 $order = wc_get_order($order_id); if (!$order || !class_exists('WC_Subscription') || !wcs_order_contains_subscription($order)) { return '该订单不含订阅产品'; } // 获取订单关联的第一个订阅(多订阅场景可自行调整逻辑) $subscriptions = wcs_get_subscriptions_for_order($order_id); $subscription = reset($subscriptions); // 获取循环总计金额并格式化输出 $recurring_total = $subscription->get_total(); return wc_price($recurring_total); }
使用方法
- 在订单感谢页直接使用短代码:
[wdm_recurring_totals] - 如果需要指定特定订单,传入订单ID:
[wdm_recurring_totals order_id="123"](替换123为实际订单ID)
关键说明
- 代码先验证订单合法性及是否包含订阅,避免报错
- 通过
wcs_get_subscriptions_for_order获取订单关联的订阅对象,这是WooCommerce Subscriptions官方推荐的方式 - 用
wc_price()格式化金额,保证和你的商店货币格式一致
内容的提问来源于stack exchange,提问作者Dustin
相关产品推荐
相关产品推荐

