如何获取并展示WooCommerce指定用户的订阅结束日期?
获取WooCommerce用户订阅结束日期的正确方法
前提条件
- 确保已激活WooCommerce Subscriptions插件,
wcs_get_users_subscriptions()和WC_Subscription类都是该插件提供的核心功能。
正确代码示例
直接通过wcs_get_users_subscriptions()获取用户的订阅对象,再调用对象方法获取结束日期:
// 替换为目标用户ID $user_id = 123; // 获取用户所有订阅 $subscriptions = wcs_get_users_subscriptions( $user_id ); // 检查是否存在订阅 if ( ! empty( $subscriptions ) ) { // 遍历每个订阅(用户可能有多个订阅) foreach ( $subscriptions as $subscription ) { // 确认当前对象是WC_Subscription实例 if ( $subscription instanceof WC_Subscription ) { // 获取订阅结束日期(UTC时间字符串) $end_date = $subscription->get_date( 'end' ); if ( $end_date ) { // 格式化为站点本地化日期(适配时区) $formatted_date = date_i18n( get_option( 'date_format' ), strtotime( $end_date ) ); echo "订阅ID {$subscription->get_id()} 的结束日期:{$formatted_date}<br>"; } else { // 无结束日期通常意味着是永久订阅或自动续费的活跃订阅 echo "订阅ID {$subscription->get_id()}:无结束日期(永久/自动续费)<br>"; } } } } else { echo "该用户暂无有效订阅"; }
常见错误原因及解决
- 函数/类不存在:未激活WooCommerce Subscriptions插件,先在后台启用该插件。
- 直接实例化WC_Subscription报错:不要手动
new WC_Subscription(),应该通过wcs_get_users_subscriptions()或wcs_get_subscription($subscription_id)获取已初始化的对象,手动实例化需要传入正确的订阅订单ID,容易出错。 - 返回空订阅数组:用户ID无效,或该用户确实没有任何订阅,先验证用户ID是否正确。
- 日期显示异常:未使用
date_i18n()本地化,直接用date()会忽略站点时区设置,导致日期显示偏差。
内容的提问来源于stack exchange,提问作者Yura Radkovskyi
相关产品推荐
相关产品推荐

