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

如何在WordPress PHP中为GraphQL的深层嵌套项添加字段

解决WPGraphQL嵌套层级字段添加问题

嘿,我懂你现在的困扰——你已经能顺利给根级的cart类型添加自定义字段,但想把cartProductName放到更深的cart -> content -> nodes -> product -> node这个嵌套层级里对吧?咱们来一步步搞定这个问题。

核心问题:找对目标类型的名称

你之前的代码把字段注册到了cart类型上,所以它只会出现在根的cart节点下。而你要添加的位置是嵌套里的node对象,这个对象有自己的GraphQL类型名(比如WooCommerce+WPGraphQL环境下,这个类型通常是Product,也可能是SimpleProduct/VariableProduct这类更具体的类型)。

第一步必须先确认这个node对应的类型名,方法很简单:

  • 打开WPGraphQL的Playground,执行下面的查询,拿到__typename字段的值:
query GetCartProductTypeName {
  cart {
    content {
      nodes {
        ... on ProductItem {
          product {
            node {
              __typename
            }
          }
        }
      }
    }
  }
}

返回结果里的__typename就是你要找的目标类型名,比如Product。

注册字段到目标类型

拿到类型名后,只需要把register_graphql_field的第一个参数改成这个类型名就行。比如如果类型是Product,代码如下:

register_graphql_field('Product', 'cartProductName', [
    'type' => 'String',
    'description' => "Get product name for cart",
    'resolve' => function ($productNode) {
        // 这里的$productNode就是嵌套层级里的Product对象
        // 你可以根据需求获取数据,比如返回测试值,或者调用产品方法
        // 比如WooCommerce产品可以用 $productNode->get_name()
        return "Banana!";
    }
]);

测试效果

保存代码后,在Playground里执行查询验证:

query GetCartWithCustomField {
  cart {
    content {
      nodes {
        ... on ProductItem {
          product {
            node {
              name # 原有字段
              cartProductName # 你的自定义字段
            }
          }
        }
      }
    }
  }
}

这样就能在cart -> content -> nodes -> product -> node下看到返回的Banana!了。

额外提示

如果你的node类型不是Product(比如是更细分的产品类型),只要把register_graphql_field的第一个参数换成查询到的__typename值就行。另外,如果需要这个字段只在购物车上下文生效,可以在resolve函数里通过$context参数判断当前请求的上下文,但一般来说直接注册到对应的产品类型上就足够满足需求啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 11:02:43