Розробка сайту на CMS WordPress
WordPress працює на близько 43% сайтів у світі. Не через ідеальну архітектуру, а через зрілу екосистему: тисячі плагінів, зрозумілий інтерфейс редагування, величезне співтовариство. Для більшості корпоративних сайтів, лендингів та блогів це розумний вибір, який дозволяє редактору працювати самостійно без участі розробника.
Що входить у розробку сайту
Повнофункціональний проект включає:
- Налаштування окруження: LEMP-стек (Linux + Nginx + MySQL + PHP 8.x), SSL, налаштування прав файлової системи
- Тема: розробка під дизайн або доробка готової теми з збереженням оновлюваності через Child Theme
- Типи контенту: Custom Post Types та таксономії під структуру конкретного сайту
- Поля: ACF (Advanced Custom Fields) для структурованих даних
- Безпека: відключення XML-RPC, обмеження спроб входу, приховування версії WP, правила Nginx
- Продуктивність: кешування, стиснення, оптимізація зображень
- SEO: Yoast або Rank Math, sitemap, Open Graph
Структура проекту
Правильна структура розділяє ядро, плагіни та кастомний код:
/var/www/site.com/
├── wp-core/ ← ядро WordPress (не трогаємо вручну)
├── wp-content/
│ ├── themes/
│ │ ├── parent-theme/ ← базова тема
│ │ └── site-theme/ ← дочерня тема (весь кастомний код)
│ ├── plugins/
│ │ ├── advanced-custom-fields-pro/
│ │ └── site-core/ ← кастомний плагін проекту (CPT, функції)
│ └── uploads/
└── wp-config.php
Кастомний плагін замість functions.php — хороша практика: плагін активується явно, не залежить від теми, можна деактивувати без втрати функціональності.
Продуктивність з коробки
WordPress без налаштування повільний. Базові заходи:
# Nginx: кеш статичних файлів
location ~* \.(css|js|png|jpg|jpeg|gif|webp|svg|ico|woff2)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
# Gzip
gzip on;
gzip_types text/css application/javascript image/svg+xml;
gzip_vary on;
Плагіни для кешування: WP Rocket (платний, кращий результат) або W3 Total Cache (безплатний). Налаштування Redis Object Cache — для сайтів з високим трафіком.
Оптимізація БД: WordPress без чистки накопичує чернетки, ревізії, трансієнти:
-- Видалити все ревізії постів
DELETE FROM wp_posts WHERE post_status = 'inherit' AND post_type = 'revision';
-- Видалити просроченні трансієнти
DELETE FROM wp_options WHERE option_name LIKE '_transient_timeout_%' AND option_value < UNIX_TIMESTAMP();
DELETE FROM wp_options WHERE option_name LIKE '_transient_%' AND option_name NOT LIKE '_transient_timeout_%';
Через WP CLI:
wp post delete $(wp post list --post_type=revision --format=ids) --force
wp transient delete --expired
wp db optimize
Безпека
Обов'язковий мінімум для продакшену:
// wp-config.php
define('DISALLOW_FILE_EDIT', true); // заборона редактора файлів
define('DISALLOW_FILE_MODS', true); // заборона встановлення плагінів/тем
define('WP_DEBUG', false);
define('WP_DEBUG_LOG', false);
define('FORCE_SSL_ADMIN', true);
Nginx: блокування доступу до чутливих файлів:
# Заборонити доступ до wp-config.php
location = /wp-config.php { deny all; }
# Заборонити PHP в uploads
location ~* /(?:uploads|files)/.*\.php$ { deny all; }
# Вимкнути XML-RPC якщо не потрібен
location = /xmlrpc.php { deny all; }
# Приховати readme.html
location ~* ^/(?:readme|license|wp-config-sample)\.(?:html?|txt)$ { deny all; }
Обмеження спроб входу — плагін Limit Login Attempts Reloaded або рівень Nginx:
location = /wp-login.php {
limit_req zone=login burst=3 nodelay;
include fastcgi_params;
fastcgi_pass php-fpm;
}
# У http-блоці
limit_req_zone $binary_remote_addr zone=login:10m rate=1r/m;
Оновлення та розгортання
WP CLI у скрипті розгортання:
#!/bin/bash
set -e
echo "Резервна копія БД..."
wp db export backups/pre-deploy-$(date +%Y%m%d-%H%M%S).sql
echo "Оновлення WordPress core..."
wp core update
echo "Оновлення плагінів..."
wp plugin update --all
echo "Скидання кешу..."
wp cache flush
wp rewrite flush
echo "Готово."
Для командних проектів — фіксувати версії плагінів і ядра в composer.json через johnpbloch/wordpress та wpackagist, розгортати через CI/CD з тестами (хоча б smoke-тест доступності ключових сторінок).
Терміни
Встановлення, налаштування безпеки та продуктивності — 4–6 годин. Структура контенту (CPT, ACF), базова тема — 1–2 дні залежно від складності. SEO-налаштування, sitemap, Open Graph — ще 2–3 години.







