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

WooCommerce用户后台显示订阅:如何获取订阅额外字段数据

在WooCommerce用户后台展示订阅详细字段的解决方案

嘿,我之前在做WooCommerce订阅功能的时候也碰到过这个问题,其实WooCommerce Subscriptions官方提供了一套很完善的API来获取这些字段,不用自己去数据库里瞎查~ 给你分享一下我当时用的解决方案:

核心思路

WooCommerce Subscriptions把订阅封装成了WC_Subscription对象,我们可以通过官方函数wcs_get_users_subscriptions()获取当前用户的所有订阅,然后调用对象的内置方法就能轻松拿到你需要的字段。

具体字段获取方法

  • 订阅标题:通过订阅对象的订单项获取产品名称(通常订阅对应单个产品)
  • 下次续期日期:调用$subscription->get_date('next_payment'),再用本地化函数格式化显示
  • 到期日期:调用$subscription->get_date('end'),同样处理空值情况(比如永久订阅)
  • 订阅状态:调用$subscription->get_status(),再用wc_get_order_status_name()转成友好的中文名称

完整代码示例

你可以把这段代码放到主题的functions.php文件里,或者自定义插件中,它会在用户后台的仪表盘显示订阅详细列表:

// 在用户后台仪表盘添加订阅详情展示
add_action('woocommerce_account_dashboard', 'display_user_subscription_details');

function display_user_subscription_details() {
    // 获取当前登录用户的所有订阅
    $user_id = get_current_user_id();
    $subscriptions = wcs_get_users_subscriptions($user_id);

    // 如果没有订阅,提示用户
    if (empty($subscriptions)) {
        echo '<p class="woocommerce-message">您当前没有活跃的订阅。</p>';
        return;
    }

    // 输出订阅表格
    echo '<h2 class="woocommerce-MyAccount-title">我的订阅</h2>';
    echo '<table class="woocommerce-MyAccount-subscriptions shop_table shop_table_responsive my_account_subscriptions">';
    echo '<thead>
            <tr>
                <th>订阅标题</th>
                <th>下次续期日期</th>
                <th>到期日期</th>
                <th>订阅状态</th>
            </tr>
          </thead>';
    echo '<tbody>';

    // 遍历每个订阅对象
    foreach ($subscriptions as $subscription) {
        // 确保是有效的订阅对象
        if (!is_a($subscription, 'WC_Subscription')) {
            continue;
        }

        // 获取订阅对应的产品名称
        $subscription_title = '';
        foreach ($subscription->get_items() as $item) {
            $subscription_title = $item->get_name();
            break; // 取第一个产品即可,订阅通常对应单个产品
        }

        // 处理下次续期日期
        $next_payment_date = $subscription->get_date('next_payment');
        $next_payment_display = $next_payment_date 
            ? date_i18n(get_option('date_format') . ' ' . get_option('time_format'), $next_payment_date->getTimestamp()) 
            : '无';

        // 处理到期日期
        $end_date = $subscription->get_date('end');
        $end_date_display = $end_date 
            ? date_i18n(get_option('date_format'), $end_date->getTimestamp()) 
            : '永久';

        // 处理订阅状态
        $status = $subscription->get_status();
        $status_display = wc_get_order_status_name($status);

        // 输出当前订阅的行数据
        echo '<tr>
                <td>' . esc_html($subscription_title) . '</td>
                <td>' . esc_html($next_payment_display) . '</td>
                <td>' . esc_html($end_date_display) . '</td>
                <td>' . esc_html($status_display) . '</td>
              </tr>';
    }

    echo '</tbody></table>';
}

注意事项

  1. 确保你已经安装并激活了WooCommerce Subscriptions插件,因为wcs_get_users_subscriptions()和WC_Subscription类都是这个插件提供的
  2. 代码中的样式类和WooCommerce默认的订阅表格样式一致,不会破坏后台的视觉统一
  3. 所有输出都用了esc_html()来防止XSS攻击,保证安全性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:07:10