Определение списка разрешённых/запрещённых мета-значений
Мы можем получать мета-значения для пользовательских записей, пользователей, комментариев и таксономий (тегов и категорий), запрашивая поля metaValue (для единственного значения) и metaValues (для массива значений) из соответствующего типа:
Post.metaValuePost.metaValuesGenericCustomPost.metaValueGenericCustomPost.metaValuesUser.metaValueUser.metaValuesComment.metaValueComment.metaValuesPostTag.metaValuePostTag.metaValuesPostCategory.metaValuePostCategory.metaValuesGenericTag.metaValueGenericTag.metaValuesGenericCategory.metaValueGenericCategory.metaValues
Мы также можем фильтровать результаты для пользовательских записей, пользователей, комментариев и таксономий (тегов и категорий) на основе мета-данных — через поле ввода metaQuery.
Как при запросе, так и при фильтрации мета-значения могут быть публичными или приватными. Например, мета пользователя включает запись wp_capabilities, которая является приватной, тогда как description — публичной. А last_name может быть публичным или приватным в зависимости от приложения.
Плагин Gato GraphQL не навязывает, какие мета-ключи являются публичными, а какие — приватными; это необходимо настроить явно. По умолчанию список разрешённых мета-ключей пуст.
Ответ мета-значения
При запросе мета-ключа, доступ к которому не разрешён на соответствующей странице настроек, запрос возвращает ошибку.
Например, при выполнении этого запроса:
{
post(by: { id: 1 }) {
id
metaValue(key: "nothingHere")
}
}Возвращается:
{
"errors": [
{
"message": "There is no meta with key 'nothingHere'",
"extensions": {
"type": "Post",
"id": 1,
"field": "metaValue(key:\"nothingHere\")"
}
}
],
"data": {
"post": {
"id": 1,
"metaValue": null
}
}
}Если мета-ключ не существует для запрошенного объекта или его значение пустое, ответ равен null. В противном случае ответ содержит мета-значение.
Настройка разрешённых мета-ключей
Это описание для модуля «Custom Post Meta». Для модулей Users, Comments и Taxonomies процедура аналогична.
Необходимо настроить список мета-ключей, которые можно запрашивать через мета-поля.
Каждая запись может быть:
- Регулярным выражением (regex), если она заключена в
/или#, либо - Полным мета-ключом — в остальных случаях
Например, любая из этих записей соответствует мета-ключу "_edit_last":
_edit_last/_edit_.*/#_edit_([a-zA-Z]*)#
Существует 2 места для этой настройки, в порядке приоритета:
- Пользовательское: в соответствующей конфигурации схемы
- Общее: на странице настроек
В конфигурации схемы, применённой к эндпоинту, выберите опцию "Use custom configuration" и введите нужные записи:

В противном случае будут использованы записи, заданные на вкладке «Schema Custom Post Meta» в настройках:

Существует 2 режима поведения — «Allow access» и «Deny access»:
- Allow access: доступны только настроенные записи, все остальные недоступны
- Deny access: настроенные записи недоступны, все остальные доступны
