Інтеграція 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);
// Тільки оновлення безпеки
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'],
]);
});
Кастомні поля через 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 годин.







