Разработка сайта на CMS WordPress
WordPress — самая распространённая CMS в мире: около 43% сайтов в интернете работают на ней. Причина не в идеальной архитектуре, а в зрелой экосистеме: тысячи плагинов, понятный интерфейс редактирования, огромное сообщество. Для большинства корпоративных сайтов, лендингов и блогов это разумный выбор, который позволяет редактору работать самостоятельно без участия разработчика.
Что входит в разработку сайта на WordPress
Разработка сайта — это не установка темы и набор плагинов. Полноценный проект включает:
- Настройка окружения: 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 — для сайтов с высоким трафиком.
Database-оптимизация: 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
Безопасность
Обязательный минимум для production:
// wp-config.php
define('DISALLOW_FILE_EDIT', true); // запрет редактора файлов в панели
define('DISALLOW_FILE_MODS', true); // запрет установки плагинов/тем через UI
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 "Backing up database..."
wp db export backups/pre-deploy-$(date +%Y%m%d-%H%M%S).sql
echo "Updating WordPress core..."
wp core update
echo "Updating plugins..."
wp plugin update --all
echo "Flushing cache..."
wp cache flush
wp rewrite flush
echo "Done."
Для командных проектов — фиксировать версии плагинов и ядра в composer.json через johnpbloch/wordpress и wpackagist, деплоить через CI/CD с тестами (хотя бы smoke-тест доступности ключевых страниц).
Сроки
Установка, настройка безопасности и производительности — 4–6 часов. Структура контента (CPT, ACF), базовая тема — 1–2 дня в зависимости от сложности. SEO-настройка, sitemap, Open Graph — ещё 2–3 часа.







