为 Schema 添加命名空间
让插件添加到 Schema 中的所有类型和接口自动应用命名空间。
为 Schema 添加命名空间可以避免命名冲突。命名冲突发生在不同所有者(例如:公司内不同团队,或第三方插件之间)对类型或接口使用相同名称时。
例如,假设公司「AwesomeWP」有 Tutorials 团队和 Sales 团队,两个团队都为公司的 GraphQL Schema 创建了 Product 类型,从而产生冲突。
通过为 Schema 添加命名空间,这两种类型将自动转换为 AwesomeWPTutorialsProduct 和 AwesomeWPSalesProduct,无需手动修改 Schema 或让团队之间进行协调,即可避免冲突。
WordPress 数据模型的实体不应用命名空间
WordPress 数据模型被视为规范数据模型,其 GraphQL Schema 类型(如 Post 和 User)以及接口(如 Commentable 和 WithMeta)不应用命名空间。
在端点中为 Schema 添加命名空间
可以在两个层级定义 Schema 是否应用命名空间,按优先级由高到低排列:
1. 在 Schema 配置中设置
可以通过相应的 Schema 配置,为自定义端点或 persisted query 定义是否应用命名空间:

2. 在设置中定义的默认模式
如果 Schema 配置的值为 "Default",则使用在设置中定义的模式:

可视化命名空间 Schema
使用 Voyager 客户端 来可视化命名空间 Schema。
禁用命名空间时,WordPress Schema 如下所示:

启用后,插件添加的类型和接口将应用命名空间,如下所示:

查询(未)应用命名空间的类型名称
启用命名空间后,可以使用命名空间类型名称和非命名空间类型名称来查询类型。因此,只需编辑涉及冲突类型的 Query,而无需编辑所有 Query。
例如,如果 AwesomeWP 的 Sales 团队也有 Discount 类型,查询该类型名称的 Query 仍然有效:
query {
discounts {
...DiscountProps
}
}
fragment DiscountProps on Discount {
price
dateRange
}只有冲突的类型 Product 需要在 Query 中更新为 AwesomeWPSalesProduct,以消除歧义:
query {
products {
...ProductProps
}
}
fragment ProductProps on AwesomeWPSalesProduct {
price
dateRange
}GraphQL 规范
此功能目前不在 GraphQL 规范中,但已在以下位置提出请求: