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

如何从WC_Memberships数组对象中输出会员计划名称与状态值?

获取WooCommerce会员计划名称与状态的正确方法

先看你给出的var_dump输出,核心问题一下就找到了:$memberships[0]是一个对象(WC_Memberships_Integration_Subscriptions_User_Membership实例),不是数组,你之前用数组下标['plan']的访问方式不符合PHP对象的语法规则,自然取不到值。

正确获取计划名称(name)的写法

针对你要的plan里的name,直接用PHP对象的属性访问符->即可:

if (!empty($memberships)) {
    // 先做安全判断,避免属性不存在导致报错
    if (isset($memberships[0]->plan) && is_object($memberships[0]->plan)) {
        echo $memberships[0]->plan->name;
    }
}

简单解释:$memberships[0]是会员对象,它的plan属性本身也是一个对象(WC_Memberships_Integration_Subscriptions_Membership_Plan实例),而name是这个计划对象的公开属性,所以用->层层访问就没问题。

获取会员状态(status)的方法

从你给出的var_dump片段里没看到直接的status公开属性,但WooCommerce Memberships的用户会员类通常会提供公开的 getter 方法来获取受保护的属性值(毕竟大部分核心属性都是protected的,不能直接访问),你可以试试官方推荐的get_status()方法:

if (!empty($memberships)) {
    $membership = $memberships[0];
    // 先检查对象是否有这个方法,避免调用不存在的方法报错
    if (method_exists($membership, 'get_status')) {
        echo $membership->get_status();
    }
}

为什么之前的方法失效?

  • 方式一:你遍历$memberships[0](对象)时,foreach会取出对象的公开属性值,但plan本身是对象,你再用$membership["plan"]去访问,相当于把属性值(对象)当成数组来用,逻辑完全错误。
  • 方式二:直接用$memberships[0]['plan']['name']是把普通对象当数组访问,只有实现了ArrayAccess接口的对象才能这么用,显然这个会员对象没实现该接口,所以会抛出错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 00:27:28