metafields 带 namespace 报未知参数怎么取
现象#
照 Admin API 的写法写 metafields(namespace: "custom", first: 10),Storefront 直接回 Field 'metafields' doesn't accept argument 'namespace',去掉 namespace 又只能拿到 app-reserved 命名空间。
原因#
- Storefront 的 HasMetafields.metafields 只接受 identifiers,按 namespace 过滤是 Admin API 的连接参数
- 不传 namespace 时默认查 app-reserved 命名空间,商家的 custom 不在其中
- metafield 定义没有开启 Storefront access 为 PUBLIC_READ 时,查对了也返回 null
- 单次 identifiers 最多 250 项,拼太多会被截断且不报错
处理步骤#
- 改成
metafields(identifiers: [{ namespace: "custom", key: "material" }]) - 让服务端一次拼多个 identifier,一个请求取完 PDP 需要的字段
- 在后台 Settings → Custom data 里确认该定义的 Storefront access 为 Public read
- 用别名同时取多个:
m1: metafield(namespace: "custom", key: "material") { value } - 按返回的
type解析 value,list.single_line_text_field 需要 JSON.parse
验收标准#
同一商品在 GraphiQL 里返回的 value 非 null,type 与后台定义一致,多字段一次请求全部命中。
本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。