\”WordPress в 2026? Серьёзно?\” — слышу я каждый раз, когда рассказываю о своём технологическом стеке.
Да, серьёзно. И пока другие тратят недели на настройку Strapi или платят $300/месяц за Contentful, мой headless-сайт уже работает в продакшене.
Эта статья — продолжение кейса по разработке корпоративного сайта. Здесь я подробно расскажу о WordPress-части проекта: почему выбрал именно эту CMS, какие плагины использовал и какие грабли собрал по дороге.
Почему WordPress, а не модные альтернативы?
Когда речь заходит о выборе CMS для headless-проекта, многие сразу думают о Strapi, Sanity или Contentful. Я тоже думал. А потом посчитал.
| Критерий | WordPress | Strapi | Sanity | Contentful |
|---|---|---|---|---|
| Возраст | 21 год | 9 лет | 7 лет | 11 лет |
| Стоимость | Бесплатно | Бесплатно | От $99/мес | От $300/мес |
| Хостинг | Свой сервер | Свой сервер | Cloud | Cloud |
| Обучение команды | 0 дней | 2-3 дня | 1 неделя | 1 неделя |
| Плагины | 60,000+ | ~1,500 | ~200 | ~150 |
| Stack Overflow ответов | 500,000+ | ~15,000 | ~8,000 | ~12,000 |
Для моего проекта WordPress победил по главному критерию: скорость запуска при максимальной гибкости.
Конкретные преимущества
Зрелая экосистема. 21 год разработки означает: на любой баг уже есть ответ. Я ни разу не столкнулся с проблемой, которую никто не решал до меня.
Управление пользователями из коробки. Роли (Admin, Editor, Author), права доступа, мультисайт — всё готово. Не нужно писать auth-систему с нуля или платить за Auth0.
Медиа-библиотека. Загрузка файлов, автоматическая генерация миниатюр разных размеров, метаданные изображений — работает без дополнительных плагинов.
REST API по умолчанию. Начиная с версии 4.7, WordPress включает полноценный REST API. Любой контент доступен по /wp-json/wp/v2/.
Знакомый интерфейс. Контент-менеджер уже знает WordPress. Ноль времени на обучение — сразу в работу.
Локальная разработка: Local by Flywheel
Прежде чем говорить о плагинах — инструмент, без которого я не начинаю ни один WordPress-проект.
Local (ранее Local by Flywheel) — лучший способ поднять WordPress локально на Mac или Windows.
Что умеет:
- Новый WordPress-сайт за 30 секунд (буквально)
- Автоматическая настройка nginx/Apache, PHP, MySQL
- Встроенный SSL для локальных доменов
- Live Links — публичная ссылка для показа клиенту без деплоя
- Переключение версии PHP одним кликом
- Полная интеграция с WP-CLI
- Бесплатный для основных функций
Мой workflow: открыл Local → \\\”Create new site\\\” → ввёл имя → через минуту WordPress готов.
Скачать: localwp.com
Плагины: полный стек проекта
За годы работы я перепробовал сотни плагинов. Вот 12, которые реально использую в production.
🔴 Критически важные (без них не стартую)
WP Mail SMTP
Проблема: Стандартная PHP-функция mail() отправляет письма в спам или вникуда.
Решение: Плагин позволяет отправлять через нормальные SMTP-сервисы:
- SendGrid (использую в этом проекте)
- Gmail / Google Workspace
- Mailgun, Amazon SES
- Любой SMTP-сервер
Без этого плагина вы просто не узнаете, что клиент отправил заявку.
→ wordpress.org/plugins/wp-mail-smtp
Safe SVG
Проблема: WordPress блокирует загрузку SVG из соображений безопасности.
Решение: Плагин санитизирует SVG при загрузке, удаляя потенциально опасный код (скрипты, внешние ссылки).
Почему критично: Логотипы, иконки, векторная графика — всё в SVG. Без этого плагина каждый раз конвертировать в PNG.
→ wordpress.org/plugins/safe-svg
XCloner – Backup and Restore
Проблема: Один неудачный апдейт — и сайт лежит.
Решение: Полные бэкапы (файлы + БД) с восстановлением в один клик.
Возможности:
- Бэкап по расписанию (cron)
- Хранение в облаке (S3, Google Drive, Dropbox)
- Инкрементальные бэкапы
- Восстановление прямо из админки
Правило: Бэкап перед каждым обновлением плагинов. Всегда.
→ wordpress.org/plugins/xcloner-backup-and-restore
🟡 Рекомендуемые (значительно улучшают workflow)
Contact Form 7
Для чего: Формы обратной связи с гибкой настройкой.
Киллер-фича для Headless: REST API endpoint для отправки форм:
POST /wp-json/contact-form-7/v1/contact-forms/{id}/feedback
Форма на React/Next.js отправляет данные напрямую в WordPress — без backend-прослоек.
→ wordpress.org/plugins/contact-form-7
Flamingo
Проблема: Contact Form 7 только отправляет email. Если письмо потерялось — заявка потеряна.
Решение: Сохраняет ВСЕ отправки в базу данных WordPress. В админке появляется раздел \\\”Inbound Messages\\\” с полной историей.
Установка: Просто активировать. Никаких настроек — работает автоматически.
→ wordpress.org/plugins/flamingo
WordPress Importer
Для чего: Импорт контента из XML-файлов.
Когда нужен:
- Миграция между сайтами
- Перенос демо-данных
- Восстановление из стандартного экспорта WP
→ wordpress.org/plugins/wordpress-importer
🟢 Специфичные для проекта
WooCommerce
Неожиданное применение: Использую не для продаж, а как систему управления каталогом продуктов.
Что даёт:
- Структурированные карточки товаров
- Кастомные поля (характеристики, спецификации)
- Категории и теги
- Галереи изображений
- Готовый REST API (
/wp-json/wc/v3/products)
Совет: Если нужен каталог без e-commerce — WooCommerce всё равно лучший выбор. Просто отключите корзину и оплату.
→ wordpress.org/plugins/woocommerce
Translio (AI Translation)
Что делает: Автоматический перевод контента через Claude AI.
Функционал:
- Перевод постов/страниц в один клик
- Сохранение в отдельные мета-поля
- REST API для получения переводов
- Очередь для batch-обработки
Интеграция с frontend:
GET /wp-json/mmq/v1/translate/{post_id}?lang=de
🔧 Кастомные плагины (разработаны под проект)
MMQ Configuration
Панель управления для специфичных настроек:
- REST endpoints для homepage, сервисов, приложений
- Meta boxes для расширенных полей товаров
- Настройки newsletter-секции
- Управление иконками продуктов
Почему не ACF: Для headless удобнее полный контроль над структурой REST API.
MMQ Next.js Webhooks
Автоматическое обновление frontend при изменении контента:
- Редактор сохраняет пост в WordPress
- Плагин отправляет webhook на Next.js
- Next.js ревалидирует страницы (ISR)
- Контент обновляется без редеплоя
Без этого пришлось бы ждать истечения кэша или деплоить при каждой правке.
Структура REST API
Итоговая карта endpoints проекта:
# Стандартные WordPress
GET /wp-json/wp/v2/posts # Посты блога
GET /wp-json/wp/v2/pages # Страницы
GET /wp-json/wp/v2/media # Медиафайлы
# WooCommerce
GET /wp-json/wc/v3/products # Каталог товаров
GET /wp-json/wc/v3/products/categories
# Contact Form 7
POST /wp-json/contact-form-7/v1/contact-forms/{id}/feedback
# Кастомные (MMQ Configuration)
GET /wp-json/mmq/v1/homepage # Данные главной
GET /wp-json/mmq/v1/services/{slug} # Страницы сервисов
GET /wp-json/mmq/v1/downloads # PDF-документы
GET /wp-json/mmq/v1/translate/{id} # AI-переводы
Подводные камни (о чём молчат в туториалах)
🪨 CORS-ад
Проблема: Первые 2 часа проекта я боролся с ошибками CORS при запросах с localhost.
Решение (добавить в functions.php):
add_action(\\\'rest_api_init\\\', function() {
remove_filter(\\\'rest_pre_serve_request\\\', \\\'rest_send_cors_headers\\\');
add_filter(\\\'rest_pre_serve_request\\\', function($value) {
// На продакшене заменить * на конкретный домен!
$origin = \\\'https://your-frontend.com\\\';
header(\\\"Access-Control-Allow-Origin: $origin\\\");
header(\\\'Access-Control-Allow-Methods: GET, POST, OPTIONS\\\');
header(\\\'Access-Control-Allow-Headers: Content-Type, Authorization\\\');
return $value;
});
});
⚠️ Важно: Access-Control-Allow-Origin: * — только для разработки. На проде укажите конкретный домен.
🪨 Превью постов не работает
Проблема: Кнопка \\\”Preview\\\” в WordPress открывает… WordPress. А нам нужен frontend.
Решение: Кастомный preview endpoint + фильтр preview_post_link:
add_filter(\\\'preview_post_link\\\', function($link, $post) {
return \\\'https://your-frontend.com/api/preview?id=\\\' . $post->ID;
}, 10, 2);
🪨 Медленный REST API
Проблема: Запрос /wp-json/wp/v2/posts по умолчанию возвращает ВСЁ — все поля каждого поста. Один запрос может весить 500KB.
Решение: Всегда используйте параметр _fields:
GET /wp-json/wp/v2/posts?_fields=id,title,excerpt,featured_media,date
Размер ответа падает в 10 раз.
🪨 Gutenberg + Headless = боль
Проблема: Если редакторы используют блоки Gutenberg, в API приходит HTML с кастомными комментариями. Парсить это на фронтенде — квест.
Мои варианты решения:
- Использовать Classic Editor (плагин)
- Ограничить набор разрешённых блоков
- Использовать библиотеку
@wordpress/block-serialization-default-parser
Я выбрал вариант 1 — Classic Editor. Проще для всех.
🪨 Безопасность wp-admin
Проблема: Боты постоянно долбят /wp-admin и /wp-login.php.
Решение: IP whitelist на уровне nginx:
location /wp-admin {
allow 1.2.3.4; # Ваш IP
deny all;
}
location /wp-login.php {
allow 1.2.3.4;
deny all;
}
Или плагин типа Limit Login Attempts Reloaded.
Советы по оптимизации
Кэширование на всех уровнях
REST API запросы можно (и нужно) кэшировать:
| Уровень | Инструмент | TTL |
|---|---|---|
| WordPress | Transients API | 1-24 часа |
| Сервер | nginx fastcgi_cache | 1 час |
| CDN | Cloudflare | 1-4 часа |
| Frontend | Next.js ISR (revalidate) | 60-3600 сек |
Отключите ненужное
Если WordPress только как API:
// Отключить emoji
remove_action(\\\'wp_head\\\', \\\'print_emoji_detection_script\\\', 7);
// Отключить embed
remove_action(\\\'wp_head\\\', \\\'wp_oembed_add_discovery_links\\\');
// Отключить REST API для неавторизованных (если не нужен публичный доступ)
add_filter(\\\'rest_authentication_errors\\\', function($result) {
if (!is_user_logged_in()) {
return new WP_Error(\\\'rest_forbidden\\\', \\\'Unauthorized\\\', [\\\'status\\\' => 401]);
}
return $result;
});
Итоги: когда выбирать WordPress Headless
✅ Выбирайте WordPress, если:
- Команда уже знает WordPress
- Нужен быстрый старт (дни, не недели)
- Бюджет ограничен
- Требуется сложное управление контентом (роли, workflow)
- Проект может расти непредсказуемо
❌ Рассмотрите альтернативы, если:
- Нужна real-time синхронизация (Sanity лучше)
- Команда не знает PHP вообще
- Проект строго cloud-native
- Нужен GraphQL из коробки (тогда Strapi)
Нужна помощь с Headless WordPress?
Если вы планируете похожий проект, я могу помочь на любом этапе:
🔍 Консультация (1 час) — разберём архитектуру, выберем стек, составим план
📋 Аудит — проверю текущий WordPress на готовность к headless-миграции
🚀 Разработка под ключ — от настройки CMS до деплоя, как в этом кейсе
Есть вопросы по конкретным плагинам или настройкам? Пишите в комментариях или в Telegram — отвечу.



