Настройка WordPress Multisite для мережі сайтів
WordPress Multisite (WPMS) дозволяє керувати кількома сайтами з однієї установки WordPress з єдиною БД, спільним кодом і централізованим управлінням плагінами/темами. Це не "кілька сайтів на одному сервері" — це один WordPress з розділяємою інфраструктурою. Підходить для мереж ЗМІ, мультирегіональних проектів, SaaS-платформ на WordPress, освітніх порталів. Настройка базової мережі займає 1–2 дні; настройка під production з ізоляцією даних і користувацькими плагінами — від 5 днів.
Включення Multisite
Multisite активується додаванням константи в wp-config.php до установки:
define('WP_ALLOW_MULTISITE', true);
Після переходу в Інструменти → Настройка мережі вибирається тип адресації:
-
Поддомени (
site1.example.com,site2.example.com) — потребує wildcard DNS та SSL -
Підпапки (
example.com/site1,example.com/site2) — простіша настройка
WordPress генерує код для wp-config.php і .htaccess (або nginx.conf). Приклад для nginx з поддоменами:
server {
listen 443 ssl;
server_name *.example.com example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
root /var/www/html;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Wildcard SSL для *.example.com — через Let's Encrypt з DNS-01 challenge:
certbot certonly --manual --preferred-challenges dns \
-d example.com -d '*.example.com'
Структура таблиць у БД
Multisite створює таблиці з префіксом для кожного підсайту. Головний сайт використовує wp_posts, другий — wp_2_posts, третій — wp_3_posts:
wp_blogs -- реєстр сайтів мережі
wp_sitemeta -- мета-дані всієї мережі
wp_users -- спільні користувачі (один реєстр)
wp_usermeta -- ролі зберігаються per-site
-- Таблиці першого сайту
wp_posts, wp_postmeta, wp_options...
-- Таблиці другого сайту
wp_2_posts, wp_2_postmeta, wp_2_options...
Користувачі спільні, але ролі — різні для кожного підсайту. Користувач може бути редактором на site2 і підписчиком на site3.
Програмне створення підсайтів
$blog_id = wpmu_create_blog(
'newsite.example.com',
'/',
'Новий сайт',
get_current_user_id(),
['public' => 1],
1
);
if (is_wp_error($blog_id)) {
error_log('Ошибка создания сайта: ' . $blog_id->get_error_message());
return;
}
switch_to_blog($blog_id);
update_option('blogdescription', 'Опис нового сайту');
restore_current_blog();
Користувацький домен для підсайту
Domain mapping — привязка стороннього домену (client-site.ru) до підсайту Multisite. Нативно з WordPress 4.5+:
// У wp-config.php
define('COOKIE_DOMAIN', '');
// Через WP CLI
wp --url=site2.example.com option update siteurl 'https://client-site.ru'
wp --url=site2.example.com option update home 'https://client-site.ru'
Додайте в nginx:
server {
listen 443 ssl;
server_name client-site.ru www.client-site.ru;
root /var/www/html;
# ті ж location блоки як для головного сервера
}
Мережеві плагіни і теми
Плагін, активований на рівні мережі, працює на всіх підсайтах. Плагін, активований на конкретному підсайті, працює лише там.
if (is_multisite()) {
$network_sites = get_sites(['number' => 100]);
foreach ($network_sites as $site) {
switch_to_blog($site->blog_id);
// операція для кожного сайту
restore_current_blog();
}
}
Розграничення контенту між підсайтами
Медіафайли за замовчуванням ізольовані по підсайту: wp-content/uploads/sites/2/, wp-content/uploads/sites/3/. Це правильно з точки зору безпеки, але ускладнює шаринг ресурсів.
Для спільної медиабібліотеки — плагін "Network Media Library" або користувацьке рішення.
Масштабування і обмеження
Multisite добре працює до 50–100 активних підсайтів на одному сервері. При більшій кількості починається деградація через таблицю wp_options кожного підсайту. Ознаки проблем: повільний switch_to_blog, довгий ответ на /wp-json/.
Рішення: Redis Object Cache з правильною сегрегацією ключів по blog_id, горизонтальне масштабування через Varnish, рознос БД підсайтів на різні сервери (через HyperDB).
Типові строки: базова настройка мережі з 3–5 підсайтів — 2–3 дні. Настройка з domain mapping, SSL, мережевими плагінами і користувацьким реєстратором підсайтів — 5–8 днів.







