如何在WooCommerce Subscription中判断用户订阅是否已激活且已付款
WooCommerce Subscriptions 有效订阅用户判断实现
你原来的示例代码存在两处明显问题:一是使用赋值运算符=而非比较运算符做状态判断,二是没有实际获取当前用户的订阅数据做校验,正确实现方式如下:
实现代码
// 先判断用户是否已登录 if ( is_user_logged_in() ) { // 获取当前用户的所有订阅记录 $user_subscriptions = wcs_get_users_subscriptions( get_current_user_id() ); $has_active_sub = false; // 遍历订阅判断是否存在激活且已付款的订阅 foreach ( $user_subscriptions as $subscription ) { // WooCommerce Subscriptions中active状态默认对应已付款且生效的订阅 if ( $subscription->get_status() === 'active' ) { $has_active_sub = true; break; } } if ( $has_active_sub ) { echo "Hello"; } else { echo "Goodbye"; } } else { echo "Goodbye"; }
代码说明
- 依赖WooCommerce Subscriptions官方内置函数
wcs_get_users_subscriptions()获取用户订阅数据,兼容性最优 - 订阅状态
active是插件预置的官方状态,本身就对应「已付款、处于生效周期内」的订阅,无需额外追加付款状态判断 - 如果需要限定判断指定商品的订阅,可以在遍历逻辑中追加产品ID校验即可,示例:
// 假设要判断的订阅商品ID为123 if ( $subscription->get_status() === 'active' && in_array( 123, wp_list_pluck( $subscription->get_items(), 'product_id' ) ) ) { $has_active_sub = true; break; }
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

