如何获取MemberPress中当前用户的subscription ID
MemberPress 获取当前用户关联订阅ID的实现方案
MemberPress 内置了MeprSubscription模型处理订阅数据,不需要手写原生SQL查询,可同时兼容单订阅、多订阅场景,兼容MemberPress 1.7及以上正式版本。
通用获取逻辑(覆盖单/多订阅场景)
直接调用内置模型方法拉取当前用户的订阅列表,再提取ID即可,支持按需过滤订阅状态:
// 未登录用户直接返回空结果 if ( ! is_user_logged_in() ) { return []; } $current_user_id = get_current_user_id(); /** * 方法参数说明 * 第一个参数:关联的用户ID * 第二个参数:布尔值,传true仅返回状态为「激活中」的订阅;传false返回该用户所有状态的订阅(含过期、已取消、待支付、暂停等) */ $user_subscriptions = MeprSubscription::get_all_by_user( $current_user_id, true ); $subscription_ids = []; if ( ! empty( $user_subscriptions ) ) { foreach ( $user_subscriptions as $subscription ) { // 遍历取出每个订阅实例的ID,存入结果数组 $subscription_ids[] = $subscription->id; } } // 输出结果说明: // 单订阅场景:$subscription_ids 为长度等于1的索引数组,元素值为对应订阅ID // 多订阅场景:$subscription_ids 为长度大于1的索引数组,包含该用户所有符合过滤条件的订阅ID
单订阅场景的快捷获取
如果业务仅需要取单个订阅ID(比如最新开通的订阅、最早开通的订阅),可以在拉取到订阅列表后直接排序取值:
if ( ! empty( $user_subscriptions ) ) { // 按订阅创建时间倒序排列,最新创建的订阅排在数组首位 usort( $user_subscriptions, function( $prev, $next ) { return strtotime( $next->created_at ) - strtotime( $prev->created_at ); }); $latest_subscription_id = $user_subscriptions[0]->id; // 最新创建的订阅ID $oldest_subscription_id = end( $user_subscriptions )->id; // 最早创建的订阅ID }
开发注意事项
- 禁止直接通过查询WordPress posts表提取订阅数据,MemberPress部分版本对订阅的元数据存储逻辑有调整,使用内置模型方法可避免版本兼容问题
- 如果需要筛选特定会员等级对应的订阅,可在遍历ID时增加判断:
$subscription->product_id == 目标会员等级ID,匹配成功再存入结果数组 - 调试时如果返回空数组,可先到WordPress后台「MemberPress > 订阅」列表核对当前登录用户是否存在符合过滤条件的订阅记录
内容的提问来源于stack exchange,提问作者Luke Seall
相关产品推荐
相关产品推荐

