Интеграция CMS WordPress для управления сайтом
WordPress — не только блог-движок. При правильной настройке это полноценная CMS, на которой редактор управляет контентом сайта, не трогая код. Интеграция предполагает: подключение WordPress к существующему сайту или новому проекту, настройку типов контента, прав доступа и рабочих процессов публикации.
Варианты интеграции
Полный WordPress — движок отдаёт и фронтенд, и бэкенд. Шаблонизация через PHP-темы. Подходит, если весь сайт строится на WordPress.
WordPress как бэкенд (Headless) — WordPress управляет контентом через REST API или GraphQL (WPGraphQL), фронтенд на отдельном стеке (React, Next.js, Vue). Подходит, если уже есть фронтенд-приложение или нужна максимальная гибкость.
WordPress в подпапке — основной сайт отдельно, блог/новости на site.com/blog через WordPress. Nginx-конфигурация распределяет запросы между двумя приложениями.
Установка и базовая конфигурация
Минимальные требования: PHP 8.0+, MySQL 8.0+ или MariaDB 10.4+, Nginx или Apache, 512 МБ RAM.
# Загрузка WordPress
wget https://wordpress.org/latest.tar.gz
tar -xzf latest.tar.gz -C /var/www/site.com/
wp-config.php — критичные параметры безопасности:
define('DB_NAME', 'wp_production');
define('DB_USER', 'wp_user');
define('DB_PASSWORD', getenv('WP_DB_PASSWORD')); // не в коде
define('DB_HOST', '127.0.0.1:3306');
// Уникальные соли — генерировать на https://api.wordpress.org/secret-key/1.1/salt/
define('AUTH_KEY', '...');
define('SECURE_AUTH_KEY', '...');
// ... остальные 6 ключей
// Отключить редактор файлов из панели
define('DISALLOW_FILE_EDIT', true);
// Автообновления только для security-патчей
define('WP_AUTO_UPDATE_CORE', 'minor');
// Ограничить число ревизий
define('WP_POST_REVISIONS', 5);
// Переместить wp-content
define('WP_CONTENT_DIR', '/var/www/site.com/content');
define('WP_CONTENT_URL', 'https://site.com/content');
WP CLI — незаменимый инструмент для управления через командную строку:
wp core install \
--url="https://site.com" \
--title="My Site" \
--admin_user="admin" \
--admin_email="[email protected]" \
--admin_password="$(openssl rand -base64 24)"
Типы контента под задачи сайта
Custom Post Types (CPT) — основа гибкой CMS:
// functions.php или отдельный плагин
add_action('init', function () {
register_post_type('portfolio', [
'labels' => [
'name' => 'Портфолио',
'singular_name' => 'Проект',
'add_new_item' => 'Добавить проект',
],
'public' => true,
'has_archive' => true,
'show_in_rest' => true, // обязательно для Gutenberg и REST API
'supports' => ['title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'],
'menu_icon' => 'dashicons-portfolio',
'rewrite' => ['slug' => 'portfolio'],
]);
});
Custom Fields через ACF (Advanced Custom Fields) — самый распространённый способ добавить структурированные данные:
// Программная регистрация полей (без GUI, удобно для команды)
add_action('acf/init', function () {
if (!function_exists('acf_add_local_field_group')) return;
acf_add_local_field_group([
'key' => 'group_portfolio_details',
'title' => 'Детали проекта',
'fields' => [
[
'key' => 'field_client_name',
'label' => 'Клиент',
'name' => 'client_name',
'type' => 'text',
],
[
'key' => 'field_project_url',
'label' => 'URL проекта',
'name' => 'project_url',
'type' => 'url',
],
[
'key' => 'field_technologies',
'label' => 'Технологии',
'name' => 'technologies',
'type' => 'checkbox',
'choices' => ['react' => 'React', 'vue' => 'Vue', 'laravel' => 'Laravel'],
'layout' => 'horizontal',
],
],
'location' => [[['param' => 'post_type', 'operator' => '==', 'value' => 'portfolio']]],
]);
});
Настройка ролей и доступа
Для сайтов с несколькими редакторами — разграничение прав:
// Кастомная роль «редактор новостей»
add_role('news_editor', 'Редактор новостей', [
'read' => true,
'edit_posts' => true,
'publish_posts'=> false, // не может публиковать без одобрения
'delete_posts' => false,
]);
// Ограничить доступ к CPT
$role = get_role('editor');
$role->add_cap('edit_portfolios');
$role->add_cap('publish_portfolios');
$role->remove_cap('edit_pages'); // не трогает статические страницы
Плагин Members или User Role Editor упрощают управление ролями через интерфейс, но для production-проекта лучше фиксировать роли в коде и деплоить с контролем версий.
Производительность
Кэширование объектов — обязательно для CMS с нагрузкой. Redis Object Cache:
wp plugin install redis-cache --activate
wp config set WP_CACHE true
wp config set WP_REDIS_HOST 127.0.0.1
wp config set WP_REDIS_PORT 6379
wp redis enable
Page cache через Nginx (статическая отдача без PHP):
location / {
set $cache_uri $request_uri;
if ($request_method = POST) { set $cache_uri "null cache"; }
if ($query_string != "") { set $cache_uri "null cache"; }
if ($http_cookie ~* "comment_author|wordpress_logged_in|wp-postpass") {
set $cache_uri "null cache";
}
try_files /wp-content/cache/supercache/$http_host/$cache_uri/index.html
$uri $uri/ /index.php?$args;
}
Деплой и обновления
WP CLI в CI/CD:
# Проверить ожидающие обновления
wp plugin list --update=available --format=json
# Обновить всё (в staging первым)
wp core update
wp plugin update --all
wp theme update --all
# Сброс кэша после деплоя
wp cache flush
wp rewrite flush
Базы данных WordPress нужно версионировать через миграции если используется wp-cli/wp-cli-bundle или через плагин WP Migrate DB Pro для синхронизации staging/production.
Сроки
Установка, конфигурация безопасности, CPT, ACF-поля, роли пользователей — 1–1,5 рабочих дня. Настройка Redis Object Cache, Nginx page cache — 3–4 часа. WP CLI в CI/CD pipeline — 4–6 часов.







