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

求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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 20:14:56