WPGraphQL — это мощный плагин, который добавляет в WordPress поддержку GraphQL API. Если вы устали от REST API и хотите более гибко получать данные, а также создавать современные фронтенд-приложения на React, Vue или других фреймворках, WPGraphQL станет отличным решением.
Что такое WPGraphQL и зачем он нужен
WPGraphQL — это бесплатный и открытый плагин для WordPress, который позволяет использовать GraphQL-запросы для получения и изменения данных сайта. Вместо множества REST-запросов можно отправлять один запрос, точно указывая, какие данные нужны. Это снижает нагрузку на сервер и упрощает разработку.
Преимущества WPGraphQL:
- Гибкие запросы без избыточных данных
- Поддержка чтения и изменения данных (Queries и Mutations)
- Отличная интеграция с любыми JavaScript-фреймворками
- Расширяемость через хуки и фильтры WordPress
- Совместимость с плагинами и кастомными типами записей
Для установки достаточно скачать плагин с официального репозитория или установить через админку WordPress.
Как установить и настроить WPGraphQL
Для начала установим плагин напрямую из админки WordPress:
- Перейдите в раздел “Плагины” → “Добавить новый”.
- В поиске введите
WPGraphQL. - Установите и активируйте плагин.
После активации GraphQL endpoint будет доступен по адресу https://ваш-сайт.ru/graphql. Чтобы проверить его работу, можно использовать GraphiQL IDE, например, расширение для браузера или онлайн-редактор.
Для расширения функционала рекомендуем также установить плагин WPGraphQL for Advanced Custom Fields, если вы используете ACF на сайте. Это позволит работать с полями прямо через GraphQL.
Пример базового запроса GraphQL в WordPress с WPGraphQL
Рассмотрим простой пример запроса, который получает список последних 5 постов с заголовками и датами публикации:
{
posts(first: 5) {
nodes {
title
date
uri
}
}
}Этот запрос можно отправить через GraphiQL или любой HTTP-клиент. В ответ вы получите структуру с нужными данными без лишнего.
Пример выполнения запроса с PHP
Если нужно выполнять запросы к GraphQL из PHP-кода темы или плагина, можно использовать функцию wp_remote_post:
function wpstudy_fetch_graphql_posts() {
$endpoint = site_url('/graphql');
$query = '{ posts(first: 5) { nodes { title date uri } } }';
$response = wp_remote_post($endpoint, [
'headers' => [ 'Content-Type' => 'application/json' ],
'body' => json_encode(['query' => $query])
]);
if (is_wp_error($response)) {
return [];
}
$body = json_decode(wp_remote_retrieve_body($response), true);
return $body['data']['posts']['nodes'] ?? [];
}Такой подход полезен, если нужно получить данные из GraphQL в других частях сайта или плагина.
Расширение WPGraphQL: добавление собственного поля к типу записи
Одно из ключевых преимуществ WPGraphQL — возможность расширять схему. Рассмотрим, как добавить новое поле subtitle к постам.
Предположим, у вас в метаполях (custom fields) есть поле subtitle. Добавим его в GraphQL:
add_action('graphql_register_types', function() {
register_graphql_field('Post', 'subtitle', [
'type' => 'String',
'description' => __('Подзаголовок поста', 'wpstudy'),
'resolve' => function($post) {
return get_post_meta($post->ID, 'subtitle', true);
}
]);
});Теперь в GraphQL можно запросить:
{
posts(first: 5) {
nodes {
title
subtitle
}
}
}Это позволит выводить дополнительную информацию без изменения REST API.
Пример интеграции WPGraphQL с React для получения данных
Для фронтенд-разработчиков часто важно быстро получить данные через GraphQL. Вот минимальный пример компонента на React, который получает список постов:
import React, { useEffect, useState } from 'react';
function WpstudyPosts() {
const [posts, setPosts] = useState([]);
useEffect(() => {
fetch('/graphql', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
query: `{
posts(first: 5) {
nodes {
title
uri
}
}
}`
})
})
.then(res => res.json())
.then(result => {
setPosts(result.data.posts.nodes);
});
}, []);
return (
<ul>
{posts.map(post => (
<li key={post.uri}><a href={post.uri}>{post.title}</a></li>
))}
</ul>
);
}
export default WpstudyPosts;Такой подход позволяет создавать быстрые SPA на базе WordPress без излишних запросов.
Советы по безопасности и оптимизации при работе с WPGraphQL
Несмотря на удобство, важно помнить о безопасности:
- Авторизация запросов. По умолчанию GraphQL endpoint открыт. Если вы хотите ограничить доступ, можно использовать фильтр
graphql_http_authenticateдля проверки пользователя. - Кэширование. Для снижения нагрузки используйте плагины кэширования или внешние решения — GraphQL-запросы легко кэшировать на уровне HTTP.
- Ограничение глубины и сложности запросов. Для предотвращения атак типа DoS можно ограничивать глубину вложенности запросов с помощью фильтров плагина.
Для расширенной настройки стоит изучить официальную документацию и примеры на сайте WPSHOP.ru.
Заключение
WPGraphQL — это современный инструмент для разработчиков, желающих вывести WordPress на новый уровень. Он идеально подходит для создания сложных интерфейсов и управления данными через GraphQL. Используйте приведённые примеры и расширяйте функционал под свои задачи.