Режим мультисайт в WordPress - сеть блогов

В этой записи речь пойдет о создании сети WordPress. Мой WordPress работает в режиме "мультисайт" (он же WordPress Multisite, MU, мультиблог) . Что это такое? Это размещение нескольких блогов на одном WordPress'e. Адреса блогов могут быть на разных поддоменах или находиться на одном домене, но в разных "папках", как у меня:

И если повозиться, то можно сделать даже так, чтобы каждый отдельный подсайт имел свой домен верхнего уровня. В этом должен помочь плагин WordPress MU Domain Mapping.

 

Как переключить WordPress в режим "мультисайт"

Опишу что необходимо сделать для переключения вашего wordpress'а в режим мультиблога, или как "создать сеть"  ( codex.wordpress.org/Создание_сети ):

  • Первый шаг - резервная копия. Сделайте бекап базы данных и файлов на хостинге.
  • Далее открываем файл wp-config и почти в самом конце файла, перед текстом

/* Это всё, дальше не редактируем. Успехов! */

добавляем:

define('WP_ALLOW_MULTISITE', true);

  • Теперь перейдите по адресу "Инструменты - Установка сети" в меню wordpress-админки (консоли) :

Wordpress мультисайт: установка сети

  • Вы можете увидеть надпись "Внимание: Пожалуйста, деактивируйте плагины, перед тем как создавать сеть. После создания сети можно активировать плагины снова." - деактивируйте плагины, как вас просят.
  • Теперь на странице "Инструменты - Установка сети" выбираем режим поддоменов или подпапок и жмем кнопку "Установить".

    • Если на странице Установки сети вам доступен только режим поддоменов по причине "Поскольку ваш сайт существует уже давно, сайты вашей сети должны использовать поддомены. В режиме подкаталогов потребуется изменить структуру ссылок на основном сайте, при этом есть вероятность нарушения работоспособности текущих ссылок.", то активируйте режим поддоменов, на следующем шаге переключимся в режим с подкаталогами.
  • После нажатия кнопки "Установить" вы окажетесь на странице, на которой будут понятные инструкции с тем, какие строки нужно скопировать в файлы "wp-config.php" и ".htaccess" - выполните эти инструкции.
    • Если вам нужен режим подкаталогов после того как вы установили режим поддоменов то в файле wp-config заменяем строку "define( 'SUBDOMAIN_INSTALL', true );" на "define( 'SUBDOMAIN_INSTALL', false );" и заменяем содержимое файла .htaccess на:
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# uploaded files
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^[_0-9a-zA-Z-]+/(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^[_0-9a-zA-Z-]+/(.*\.php)$ $1 [L]
RewriteRule . index.php [L]
# END WordPress
  • Зайдите в админку и активируйте ранее деактивированные плагины. Для этого перейдите в административной консоли wordpress "Мои сайты - Управление сетью - Консоль - Плагины"

Управление сетью WordPress

Вот и все! Собственно из меню "Мои сайты - Управление сетью - Консоль" можно управлять вашим мультиблогом. Изучайте это новое для Вас меню =)

Послесловие: я настраивал у себя режим работы с подкаталогами, поэтому в этом посте именно на нем акцентировано внимание.

Ставим мультисайт не в корень домена

Пример, установлен wordpress в папку site.com/multi/, мы хотим поставить еще wordpress сайты в папки site.com/site2/, site.com/site3/

Для этого мы переводим wordpress site.com/multi/ в режим мультисайта, создаем в этом мультисайте сайты, в результате получится такие адреса сайтов:

  • site.com/multi/
  • site.com/multi/site2
  • site.com/multi/site3

Далее создаем папки в корне домена:

  • site.com/site2
  • site.com/site3

В этих папках создаем htaccess-файл:

RewriteEngine On RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(index\.php)$ /multi/$1
RewriteRule ^(.*)$ /multi/$1

Далее пробегаемся по базе автозаменной, где заменяем

  • /multi/site2 на /site2
  • /multi/site3 на /site3

И чтобы не было проблем при коннекте в админку сайтов нужно прописать строки в файле wp-config:

define('ADMIN_COOKIE_PATH', '/');
define('COOKIE_DOMAIN', '');
define('COOKIEPATH', '');
define('SITECOOKIEPATH', '');

Подсмотренно вот тут: wordpress.stackexchange.com

Как правильно деактивировать режим Multisite

Если вдруг вам захотелось из Multisite-режима перейти в обычный, то необходимо выполнить следующие действия:

  • Удалите все сайты кроме основного: Мои сайты - Сайты
  • Удалите из wp-config.php строки связанные с Multisite:
define('WP_ALLOW_MULTISITE', true);
define( 'MULTISITE', true );
define( 'SUBDOMAIN_INSTALL', true );
$base = '/';
define( 'DOMAIN_CURRENT_SITE', 'mysiteurl.com' );
define( 'PATH_CURRENT_SITE', '/' );
define( 'SITE_ID_CURRENT_SITE', 1 );
define( 'BLOG_ID_CURRENT_SITE', 1 );
  • Восстановите .htaccess до исходного состояния
  • Удалите таблицы связанные с Multisite из базы данных:
    • wp_blogs
    • wp_blog_versions
    • wp_registration_log
    • wp_signups
    • wp_site
    • wp_sitemeta
  • Удалите папку wp-content/blogs.dir - она содержит папки для каждого сайта, в них хранятся загрузки для этих сайтов.
  • Активируйте плагины, которые деактивировались при отключении Multisite - это относиться к тем плагинам, которые были активированы для всей сети.

Отделение одного сайта от мультисайта

Бывает так, что один из подсайтов мультисайта нужно перенести на отдельный домен с отдельной инсталяцией wordpress - то есть отделить его от мультисайта. Я с таким случаем на практике столкнулся: я захотел перенести свой подблог elims.org.ua/relax на отдельный блог picblog.org.ua. На этом примере и буду показывать какие действия нужно совершать чтобы отделить сайт от мультисайта:

  • Узнаем префикс таблиц для нужного подблога:
    • переходим на страницу "Мои сайты - Управление сетью - Сайты" (/wp-admin/network/sites.php)
    • находим среди сайтов нужный подсайт и кликаем по нему
    • смотрим url страницы на которую попали, у меня это было /wp-admin/network/site-info.php?id=10 - нас интересует id=10
    • префикс таблиц будет следующий ВАШПРЕФИКС_IDБЛОГА_, если у нас стандартные префиксы таблицы, и сайт имеет id=10, то нас интересуют таблицы начинающие на wp_10_
  • Экспортируем таблицы с нужным префиксом  плюс таблицы wp_users и wp_usermeta используя PHPMyAdmin или аналог
  • Открываем sql-дамп в текстовом редакторе и производим автозамену текста:
    • заменяем все вхождения "wp_10_" на стандартный префикс "wp_" или тот, который вы себе выбрали.
    • заменяем все вхождения "elims.org.ua/relax" на "picblog.org.ua"
    • находим где фигурирует слово "relax" - адрес моего экспортируемого блога  и ориентируемся на что это нужно заменить. У меня нужно было заменить:
      • elims.org.ua\\/relax заменить на picblog.org.ua
      • /relax\\ заменить на пустое место
    • заменяем оставшиеся elims.org.ua на picblog.org.ua
    • заменяем https://picblog.org.ua на http://picblog.org.ua (если меняется протокол)
    • если переезжаете на другой хостинг-аккаунт, то замените полный путь к папке на сервере хостинга со старого значения на новое
    • сохраняем изменения
  • Импортируем sql-дамп в новую базу данных
  • Если вы выбрали не стандартный префикс для таблиц wordpress, то измените в таблицах wp_users и wp_usermeta стандартный префикс, на тот, что вы выбрали.
  • Копируем папки:
    • /wp-content/themes/ - шаблоны
    • /wp-content/plugins/ - плагины
    • /wp-content/blogs.dir/IDБлога - мультимедиа файлы
    • /wp-content/uploads/ - мультимедиа файлы

После этого мой отделенный сайт заработал.

Избавляемся от префикса /blog

  • На сайте с этим префиксом: Settings -> Permalinks -> Common Setting -> Default
  • At Network Admin -> Sites -> (root site) -> Settings ->строка Permalink Sturcture
  • Вводим /%category%/%post_id% или /%postname%/ или то, что нравится

Полезные ссылки:

  • WordPress MU Domain Mapping - плагин с помощью которого можно в режиме мультисайта использовать не поддомены, а отдельные домены.
  • habrahabr.ru/post/306992 - Wordpress multisite с разными базами данных
Понравилось? =) Поделись с друзьями:

Обсуждение записи “Режим мультисайт в WordPress - сеть блогов”

  1. Андрей (topforex.in.ua) says:

    Во первых спасибо за статью.
    Во вторых если можно хотел бы узнать ваш совет. Дело в том что все сработало но к урлу страниц добавилось еще приставка /blog/ от которой нужно избавиться) Не подскажите как???

  2. Владимир Демянович (elims.org.ua) says:

    Андрей, пожалуйста =)
    Нашел ответ на Ваш вопрос вот тут: wordpress.org/support/topic/why-wp-multisite-force-blog-slug-how-to-remove-it

    1. Заходим в консоль блога — параметры — постоянные ссылки и выставляем «по умолчанию». Думаю этот шаг можно пропустить, но проверять не буду.

    2. Управление сетью — сайты — выбираем «изменить» в корневом сайте — параметры — в поле «Permalink Structure» пишем ту структуру, которая нужна, например /%postname%/ если хотим чтобы доступ к страницам и записям был через ихнее название.

  3. Андрей (topforex.in.ua) says:

    Да спасибо большое получилось ноне совсем. почему то все страницы редиректит на одну и ту же.
    Я посмотрел на настройки ЧПУ и там не пропала надпись «topforex.in.ua/blog/ »
    Смотрите может я не прав но я хотел использовать эту штуку чтоб вести один и то же блог на разных языках. Один сайт это должен был быть существующий блог а один бы находился в директории /анг/ и там был бы этот же блог но на другом языке. Тему конечно я бы постарался перевести. Просто не могу найти нормальных плагинов. Вечно что то слетает. А тут раз и наверняка.

    И еще одно как вы думаете как после этого настроить сайт мап и роботс?)))

  4. Владимир Демянович (elims.org.ua) says:

    Замените blog на rus, если не получается =) Роботс можете подсмотреть на моем сайте. sitemap на мультиблоге умеет делать плагин Better WordPress Google XML Sitemaps, он автоматически создает карты сайта для всех подблогов.

  5. Андрей (topforex.in.ua) says:

    Да спасибо большое) все работает очень выручили)))

    Смотрите может я где то ошибаюсь — тогда поправьте. Я создал мультиблог но они все работают на одной базе даных. Могу ли я к другой блог подключить к другой базе даных.

  6. Владимир Демянович (elims.org.ua) says:

    Андрей, тут уже не знаю. Вся суть мультиблога в том чтоб блоги крутились на одной базе и единице wordpress. Если в будущем захочется их разделить — можно будет один из подблогов экспортировать.

  7. Андрей (topforex.in.ua) says:

    Я понял) Спасибо большое за помощь)))

  8. Иван (fxua.ru) says:

    Скажите пожалуйста а как обойти проблему с метрикой?? Дело в том что когда переходиш между блогами она не считает уже. Да и счетчик негзя поставить на другие блоги так как они цепляются только к доменам) И как быть??))

  9. Владимир Демянович (elims.org.ua) says:

    Иван, в смысле не считает? Если на каждом подблоге поставили один и тот же счетчик — будет считать. Вы скорее всего имели в виду, то, что Вам хочется посмотреть отдельную статистику для каждого подблога, а не в общем по всему блогу.

    Я для этого использую настраиваемые сводки в Google Analytics. Вы можете для этого настроить в метрике цели — help.yandex.ru/metrika/general/goals.xml

    С их помощью можно анализировать посещаемость отдельной части сайта (то есть то или иного подблога).

    Правда в google analytics сводка сразу отобразиться за счет старых собранных данных, а вот в метрике придется ждать пока соберутся новые данные по только-что созданной цели.

    Это в с случае если мультиблог на одном домене, как у меня. Если каждый блог мультиблога на одтельном домене — тогда установите для каждого домена свой счетчик.

    И да, один и тот же счетчик в метрике можно ставить на любое количество доменов.

  10. Владимир Демянович (elims.org.ua) says:

    Нашел еще вариант — в меню «содержание — популярное». Жмем плюсики напротив домена сайта и видим посещаемость для каждого подблога, разворачиваем какой-то подблог (жмем плюсик) и видим статистику для каждой категории или страницы подблога. Для этого цели создавать не нужно.

  11. Женя says:

    Добрый день! А Вы не подскажете, возможно ли настроить такую сеть на локальном сервере. Кода дохожу до пункта когда нужно заново залогинится в админку меня не пускает. И еще если вариант с локальным хостом не сработает, то можно ли где нибудь га тестовом поддомене это дело попробовать поднять? например на поддомене типа test.mysite.com

  12. Владимир Демянович (elims.org.ua) says:

    Женя, добрый день. Да, думаю, можно. У меня проблем со входом в админку не было. Пробуйте восстановить пароль через почту.

  13. Вася Пупкин says:

    мультиблог — это как удалять гланды через задний проход
    какие проблемы установить два или три wordpress отдельно под каждый блог?

  14. Владимир Демянович (elims.org.ua) says:

    Мне удобней обновить один wordpress и плагины на нем, чем каждый раз это делать на 10 wordpress`ах.

    На вкус и цвет товарища нет)

  15. name nika (olgworld.com) says:

    Вроде прочитала и все довольно понятно.Попробую осуществить чуть позже.Это очень интересно. Я правильно поняла, что админка у этого мультиблога одна?

  16. Владимир Демянович (elims.org.ua) says:

    Да, админка одна

  17. vanoc (vanoc.ru) says:

    у вас в удалении таблиц указано wp_meta, когда правильно будет wp_sitemeta

  18. Владимир Демянович (elims.org.ua) says:

    vanoc, действительно. Спасибо. Исправил.

  19. oleg (cg-school.org) says:

    Спасибо за статью.
    Возникла такая проблема — при создании сети на основном сайте полетели постоянные ссылки старых записей. Можно ли это как-то исправить?

  20. Владимир Демянович (elims.org.ua) says:

    oleg, думаю что это можно исправить переадресацией по маске.

  21. oleg (cg-school.org) says:

    Где можно почитать, как это сделать?

  22. Владимир Демянович (elims.org.ua) says:

    Я вроде еще не писал об этом у себя на блоге, но запрос «301 переадресация .htaccess» в google должен помочь.

  23. Иван says:

    Я правильно понял, что схема действий после активации мультисайта на базе субдоменов будет примерно такой:

    1) создаем в вордпресс новый сайт;
    2) создает новую dns-запись;
    3) создаем новый каталог на сервере для сайта и настраиваем тот же apache для него;
    4) в эту папку устанавливаем новую копию вордпресс и указываем ту же БД, что и для «корневого» сайта;
    5) проделываем остальные настройки.

    Меня тут больше всего интересует 4-ый пункт, с остальными-то точно так.

  24. Владимир Демянович (elims.org.ua) says:

    На практике мультисайт на база субдоменов не попадался. Но думаю логика такая же как и на базе подпапок: никаких папок и отдельных копий вордпресс не будет. То есть только шаги 1 и 2,5 из Вашего списка.

  25. uglion says:

    Владимир, привет. Я вот сейчас отцепляю один из поддоменов мультисайта. Хочу вынести его на отдельный домен. А как сделать редирект с одного поддомена мультисайта на другой домен?

  26. Иван says:

    To Владимир Демянович (elims.org.ua):
    Да, все уже сделал, все было достаточно просто. Просто немного страшно было экспериментировать :)

    To uglion:
    Если через htaccess, то так:
    Redirect 301 /test-1/ site.ru/test-2/
    или подробней:
    RewriteCond %{REQUEST_URI} ^/test/$
    RewriteRule ^.*$ site.ru/new-test/? [R=301,L]

  27. Владимир Демянович (elims.org.ua) says:

    Иван, отлично =)

    uglion, примеры Ивана должны работать, у меня тоже есть разные примеры касающиеся htaccess, вот тут: elims.org.ua/blog/htaccess-poleznye-primery-koda-dlya-optimizacii-sajta/

  28. Феликс says:

    Здравствуйте! Очень понравилась Ваша статья. Спасибо! Могли бы Вы объяснить как исправить проблему? После установки все заработало, но ссылки старых записей теперь битые. В комментариях я прочитал что можно сделать редирект по маске. Если Вас не затруднит могли бы Вы объяснить как это сделать? Ничего не понял из объяснений на эту тему из других источников:(

    С уважением, Феликс

  29. Феликс says:

    p.s.
    Также не могу создать новую запись. В смысле запись создается но ссылка битая.

  30. Владимир Демянович (elims.org.ua) says:

    Феликс, здравствуйте, по поводу редиректов по маске — читайте о htaccess. Примеры можно посмотреть тут: https://elims.org.ua/blog/htaccess-poleznye-primery-koda-dlya-optimizacii-sajta/

    А вот почему новая запись создается с битой ссылкой нужно разобраться. Попытайтесь создать новый подблог в Вашем мультиблоге и там опубликовать запись. И попытайтесь создать тестовый пустой сайт с мультиблогом и попытаться опубликовать запись.

    Думаю в ходе этих действий выявите причину битой ссылки =)

  31. Андрей says:

    Привет, подскажи пожалуйста, создал мультисеть, было все ок, потом при попытке от админа зайти в раздел управления сетью получаю
    You do not have permission to access this page.
    как не копал — не могу победить.режим подкаталогов

  32. Андрей says:

    > Послесловие: я настраивал у себя режим работы с подкаталогами, поэтому в этом посте именно на нем акцентировано внимание.

    Привет, я так и не понял как перевести на подпапки существующий файл? Спасибо.
    И возможна ли одна база пользователей для всех сайтов, или у каждого своя?

  33. Владимир Демянович (elims.org.ua) says:

    существующий файл? Не совсем понял о чем речь.

    В мультисайте используется одна база.

  34. Виталий Охрименко says:

    Здравствуйте! Хочу реализовать сеть мультисайтов для доски объявлений в вордпресс на одном шаблоне на поддоменах. То есть чтобы было отдельно авто, недвижимость, работа и т. д. Есть идея создать все на разных поддоменах ради того, чтобы распределить нагрузку на сервер и таким образом выиграть не только в аналитике, но и в скорости портала.
    Соответственно у меня возникли следующие вопросы:

    — При создании мультисайтов (сети сайтов) в вордпресс на поддоменах, каким образом нагрузка распределяется между серверами?
    — Как я понимаю данные об авторизации хранятся в единой таблице базы данных. Каким образом эта таблица может управлять всеми поддоменами?
    — На каждом поддомене будет своя база данных (физическая), либо же в единой базе данных будут свои таблицы для каждого поддомена (логические)?
    — Возможно ли распределить нагрузку между разными серверами или всю мультисеть будет обрабатывать один сервер?

    Вы мне очень поможете своими ответами!
    С уважением, Виталий Охрименко!

  35. Виталий says:

    Здравствуйте.
    Есть мультисайт. Вчера истекла оплата домена, после оплаты перестали работать сайты на поддоменах. В админке есть настройки мультисайтов, но при переходе на любой из поддоменов переходит к странице 404. В чем может быть проблема?
    Спасибо!

  36. Владимир Демянович (elims.org.ua) says:

    если поддомены возвращают 404 — значит они созданы, как я понимаю. правильно?

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

Обсудить