Настройка WordPress Multisite для сети сайтов

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.
Разработка и обслуживание любых видов сайтов:
Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Настройка WordPress Multisite для сети сайтов
Средняя
~3-5 рабочих дней
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    874
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    851

Настройка WordPress Multisite для сети сайтов

WordPress Multisite (WPMS) позволяет управлять несколькими сайтами из одной установки WordPress с единой БД, общим кодом и централизованным управлением плагинами/темами. Это не «несколько сайтов на одном сервере» — это один WordPress с разделяемой инфраструктурой. Подходит для сетей СМИ, мультирегиональных проектов, SaaS-платформ на WordPress, образовательных порталов. Настройка базовой сети занимает 1–2 дня; доработка под production с изоляцией данных и кастомными плагинами — от 5 дней.

Включение Multisite

Multisite активируется добавлением константы в wp-config.php до установки:

/* Включить WordPress Multisite */
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;

    # Multisite rewrite rules
    if (!-e $request_filename) {
        rewrite /wp-admin$ $scheme://$host/wp-admin/ permanent;
        rewrite ^(/[^/]+)?(/wp-.*) $2 last;
        rewrite ^(/[^/]+)?(/.*\.php) $2 last;
    }

    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_blog_versions -- версии БД по сайтам
wp_sitemeta      -- мета-данные всей сети
wp_site          -- корневой сайт
wp_users         -- общие пользователи (один реестр)
wp_usermeta      -- роли хранятся здесь per-site

-- Таблицы первого сайта
wp_posts, wp_postmeta, wp_options, wp_terms...

-- Таблицы второго сайта
wp_2_posts, wp_2_postmeta, wp_2_options, wp_2_terms...

Пользователи общие, но роли — разные для каждого подсайта. Пользователь может быть редактором на site2 и подписчиком на site3.

Программное создание подсайтов

// Создание нового подсайта
$blog_id = wpmu_create_blog(
    'newsite.example.com',  // домен
    '/',                    // путь
    'Новый сайт',           // название
    get_current_user_id(),  // владелец
    ['public' => 1],        // опции
    1                       // ID сети
);

if (is_wp_error($blog_id)) {
    error_log('Ошибка создания сайта: ' . $blog_id->get_error_message());
    return;
}

// Переключение контекста для работы с подсайтом
switch_to_blog($blog_id);
update_option('blogdescription', 'Описание нового сайта');
update_option('page_on_front', $homepage_id);
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 site switch-language ru_RU
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;
    # ... SSL config ...
    root /var/www/html; # та же директория WordPress
    # те же location блоки
}

Сетевые плагины и темы

Плагин, активированный на уровне сети, работает на всех подсайтах. Плагин, активированный на конкретном подсайте, работает только там. Важно: некоторые плагины не поддерживают Multisite — они используют хардкоженные table prefix или get_option без switch_to_blog.

// Проверка: запущены ли мы в контексте multisite
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» или кастомное решение через UPLOADBLOGSDIR:

// Глобальная таблица пользователей (если нужна общая библиотека)
define('WPMU_ACCEL_REDIRECT', true);
define('WPMU_SENDFILE', false);

Масштабирование и ограничения

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 дней.