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>'; }
注意事项
- 确保你已经安装并激活了WooCommerce Subscriptions插件,因为
wcs_get_users_subscriptions()和WC_Subscription类都是这个插件提供的 - 代码中的样式类和WooCommerce默认的订阅表格样式一致,不会破坏后台的视觉统一
- 所有输出都用了
esc_html()来防止XSS攻击,保证安全性
内容的提问来源于stack exchange,提问作者Garconis
相关产品推荐
相关产品推荐

