GraphQL в WordPress: руководство WPGraphQL и повышение скорости
Что такое GraphQL и почему он заменяет REST API
GraphQL – язык запросов, разработанный Facebook в 2015 году. В отличие от традиционного REST, где каждый эндпоинт возвращает фиксированный набор данных, GraphQL позволяет клиенту точно указать, какие поля нужны, и получить их одним запросом. Это снижает количество запросов, уменьшает объём передаваемых данных и упрощает работу с мобильными и SPA‑приложениями.
Основные отличия от REST
- Один запрос → несколько ресурсов
- Точная выборка полей (over‑ и under‑fetching исчезают)
- Схема в виде типизированного графа, которую можно интроспектировать
- Встроенная поддержка мутаций (создание/обновление/удаление)
Установка и настройка WPGraphQL
WPGraphQL – официальный плагин, добавляющий GraphQL‑слой в WordPress. Он полностью совместим с Gutenberg, ACF и большинством популярных плагинов.
Требования к серверу
Для стабильной работы плагина ваш хостинг должен поддерживать PHP ≥ 7.4 и иметь включённый json‑расширение. Если планируете использовать кеширование, рекомендуется установить htaccess‑ускорение.
Плагин и базовая конфигурация
- Перейдите в «Плагины → Добавить новый» и найдите WPGraphQL.
- Установите и активируйте плагин.
- В меню появится пункт «GraphQL». По умолчанию все публичные типы (posts, pages, users) уже доступны.
Для расширения схемы откройте functions.php вашей темы и добавьте пример ниже.
add_action( 'graphql_register_types', function() {
register_graphql_object_type( 'Book', [
'description' => __( 'Книга в библиотеке', 'my-textdomain' ),
'fields' => [
'ID' => [
'type' => 'ID',
'description' => __( 'Идентификатор книги', 'my-textdomain' ),
],
'title' => [
'type' => 'String',
'description' => __( 'Название книги', 'my-textdomain' ),
],
'author' => [
'type' => 'String',
'description' => __( 'Автор книги', 'my-textdomain' ),
],
],
] );
} ); Первые запросы: типы, поля, фильтры
После активации плагина перейдите по адресу /graphql (например, https://example.com/graphql) – откроется GraphiQL‑консоль, где можно писать запросы.
Пример простого запроса
{
posts(where: {status: PUBLISHED}, first: 5) {
nodes {
id
title
excerpt
}
}
} Ответ будет содержать ровно те поля, которые вы запросили, без лишних метаданных.
Мутации: создание и обновление контента
Мутации – это аналоги POST/PUT/PATCH в REST. WPGraphQL поставляется с набором базовых мутаций, а вы можете регистрировать свои.
Пример мутации создания поста
mutation CreatePost($title: String!, $content: String!) {
createPost(input: {title: $title, content: $content, status: PUBLISH}) {
post {
id
title
status
}
success
errors
}
} Переменные передаются в виде JSON:
{
"title": "Новый пост через GraphQL",
"content": "Контент, сформированный на лету."
} Оптимизация производительности GraphQL в WordPress
Хотя GraphQL уже экономит трафик, без правильных настроек запросы могут нагружать базу данных.
Кеширование запросов
Самый простой способ – включить Wordfence и использовать встроенный кеш запросов в WPGraphQL. Для более продвинутого решения подключите wp-graphql-cache – плагин, сохраняющий ответы в объектный кеш.
Ограничение глубины и сложности
В graphql.php можно задать лимит:
add_filter( 'graphql_max_query_depth', function() { return 8; } );
add_filter( 'graphql_max_query_complexity', function() { return 2000; } ); Это защищает сайт от «глубоких» запросов, которые могут привести к DoS‑атакам.
Практика: интеграция с фронтендом React
Для SPA‑приложений чаще используют Apollo Client. Ниже – минимальная настройка.
Использование Apollo Client
import { ApolloClient, InMemoryCache, gql } from '@apollo/client';
const client = new ApolloClient({
uri: 'https://example.com/graphql',
cache: new InMemoryCache(),
});
client.query({
query: gql`
query GetPosts {
posts(first: 10) {
nodes { id title }
}
}
`,
}).then(result => console.log(result.data)); С помощью Apollo вы получаете автоматическое кеширование на клиенте, а вместе с серверным кешем WPGraphQL достигаете скорости, сравнимой с нативным htaccess‑ускорением.
Дополнительные ресурсы
- GitHub + WordPress: управление версиями тем и плагинов в 2026 году – как хранить схему GraphQL в репозитории.
- Sucuri WordPress: обзор и настройка – безопасность вашего GraphQL‑эндпоинта.
❓ Часто задаваемые вопросы
Можно ли отключить отдельные типы в WPGraphQL?
Да, через фильтр graphql_register_types вы можете удалить или скрыть любые типы, используя функцию unregister_graphql_type().
Как защитить GraphQL‑эндпоинт от неавторизованных запросов?
Используйте механизм ролей WordPress и добавьте проверку в хук graphql_before_resolve_field, возвращая ошибку, если пользователь не имеет нужных прав.
Влияет ли кеширование WPGraphQL на обновление контента?
Кеш инвалидируется автоматически при сохранении постов, но при кастомных типах может потребоваться вызвать wp_graphql_cache_invalidate() вручную.
Можно ли использовать WPGraphQL с мультисайтомом?
Да, плагин полностью поддерживает WordPress Multisite, однако каждый сайт имеет свою схему и кеш, что требует отдельной настройки.