В этой записи речь пойдет о создании сети WordPress. Мой WordPress работает в режиме "мультисайт" (он же WordPress Multisite, MU, мультиблог) . Что это такое? Это размещение нескольких блогов на одном WordPress'e. Адреса блогов могут быть на разных поддоменах или находиться на одном домене, но в разных "папках", как у меня:
- Основной бог - elims.org.ua
- Блог с притчами - elims.org.ua/pritchi
- Блог о фотографии - elims.org.ua/photo
- Блог с афоризмами - elims.org.ua/aphorism
И если повозиться, то можно сделать даже так, чтобы каждый отдельный подсайт имел свой домен верхнего уровня. В этом должен помочь плагин WordPress MU Domain Mapping.
Как переключить WordPress в режим "мультисайт"
Опишу что необходимо сделать для переключения вашего wordpress'а в режим мультиблога, или как "создать сеть" ( codex.wordpress.org/Создание_сети ):
- Первый шаг - резервная копия. Сделайте бекап базы данных и файлов на хостинге.
- Далее открываем файл wp-config и почти в самом конце файла, перед текстом
/* Это всё, дальше не редактируем. Успехов! */
добавляем:
define('WP_ALLOW_MULTISITE', true);
- Теперь перейдите по адресу "Инструменты - Установка сети" в меню 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 в папку 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 с разными базами данных
Во первых спасибо за статью.
Во вторых если можно хотел бы узнать ваш совет. Дело в том что все сработало но к урлу страниц добавилось еще приставка /blog/ от которой нужно избавиться) Не подскажите как???
Андрей, пожалуйста =)
Нашел ответ на Ваш вопрос вот тут: wordpress.org/support/topic/why-wp-multisite-force-blog-slug-how-to-remove-it
1. Заходим в консоль блога — параметры — постоянные ссылки и выставляем «по умолчанию». Думаю этот шаг можно пропустить, но проверять не буду.
2. Управление сетью — сайты — выбираем «изменить» в корневом сайте — параметры — в поле «Permalink Structure» пишем ту структуру, которая нужна, например /%postname%/ если хотим чтобы доступ к страницам и записям был через ихнее название.
Да спасибо большое получилось ноне совсем. почему то все страницы редиректит на одну и ту же.
Я посмотрел на настройки ЧПУ и там не пропала надпись «topforex.in.ua/blog/ »
Смотрите может я не прав но я хотел использовать эту штуку чтоб вести один и то же блог на разных языках. Один сайт это должен был быть существующий блог а один бы находился в директории /анг/ и там был бы этот же блог но на другом языке. Тему конечно я бы постарался перевести. Просто не могу найти нормальных плагинов. Вечно что то слетает. А тут раз и наверняка.
И еще одно как вы думаете как после этого настроить сайт мап и роботс?)))
Замените blog на rus, если не получается =) Роботс можете подсмотреть на моем сайте. sitemap на мультиблоге умеет делать плагин Better WordPress Google XML Sitemaps, он автоматически создает карты сайта для всех подблогов.
Да спасибо большое) все работает очень выручили)))
Смотрите может я где то ошибаюсь — тогда поправьте. Я создал мультиблог но они все работают на одной базе даных. Могу ли я к другой блог подключить к другой базе даных.
Андрей, тут уже не знаю. Вся суть мультиблога в том чтоб блоги крутились на одной базе и единице wordpress. Если в будущем захочется их разделить — можно будет один из подблогов экспортировать.
Я понял) Спасибо большое за помощь)))
Скажите пожалуйста а как обойти проблему с метрикой?? Дело в том что когда переходиш между блогами она не считает уже. Да и счетчик негзя поставить на другие блоги так как они цепляются только к доменам) И как быть??))
Иван, в смысле не считает? Если на каждом подблоге поставили один и тот же счетчик — будет считать. Вы скорее всего имели в виду, то, что Вам хочется посмотреть отдельную статистику для каждого подблога, а не в общем по всему блогу.
Я для этого использую настраиваемые сводки в Google Analytics. Вы можете для этого настроить в метрике цели — help.yandex.ru/metrika/general/goals.xml
С их помощью можно анализировать посещаемость отдельной части сайта (то есть то или иного подблога).
Правда в google analytics сводка сразу отобразиться за счет старых собранных данных, а вот в метрике придется ждать пока соберутся новые данные по только-что созданной цели.
Это в с случае если мультиблог на одном домене, как у меня. Если каждый блог мультиблога на одтельном домене — тогда установите для каждого домена свой счетчик.
И да, один и тот же счетчик в метрике можно ставить на любое количество доменов.
Нашел еще вариант — в меню «содержание — популярное». Жмем плюсики напротив домена сайта и видим посещаемость для каждого подблога, разворачиваем какой-то подблог (жмем плюсик) и видим статистику для каждой категории или страницы подблога. Для этого цели создавать не нужно.
Добрый день! А Вы не подскажете, возможно ли настроить такую сеть на локальном сервере. Кода дохожу до пункта когда нужно заново залогинится в админку меня не пускает. И еще если вариант с локальным хостом не сработает, то можно ли где нибудь га тестовом поддомене это дело попробовать поднять? например на поддомене типа test.mysite.com
Женя, добрый день. Да, думаю, можно. У меня проблем со входом в админку не было. Пробуйте восстановить пароль через почту.
мультиблог — это как удалять гланды через задний проход
какие проблемы установить два или три wordpress отдельно под каждый блог?
Мне удобней обновить один wordpress и плагины на нем, чем каждый раз это делать на 10 wordpress`ах.
На вкус и цвет товарища нет)
Вроде прочитала и все довольно понятно.Попробую осуществить чуть позже.Это очень интересно. Я правильно поняла, что админка у этого мультиблога одна?
Да, админка одна
у вас в удалении таблиц указано wp_meta, когда правильно будет wp_sitemeta
vanoc, действительно. Спасибо. Исправил.
Спасибо за статью.
Возникла такая проблема — при создании сети на основном сайте полетели постоянные ссылки старых записей. Можно ли это как-то исправить?
oleg, думаю что это можно исправить переадресацией по маске.
Где можно почитать, как это сделать?
Я вроде еще не писал об этом у себя на блоге, но запрос «301 переадресация .htaccess» в google должен помочь.
Я правильно понял, что схема действий после активации мультисайта на базе субдоменов будет примерно такой:
1) создаем в вордпресс новый сайт;
2) создает новую dns-запись;
3) создаем новый каталог на сервере для сайта и настраиваем тот же apache для него;
4) в эту папку устанавливаем новую копию вордпресс и указываем ту же БД, что и для «корневого» сайта;
5) проделываем остальные настройки.
Меня тут больше всего интересует 4-ый пункт, с остальными-то точно так.
На практике мультисайт на база субдоменов не попадался. Но думаю логика такая же как и на базе подпапок: никаких папок и отдельных копий вордпресс не будет. То есть только шаги 1 и 2,5 из Вашего списка.
Владимир, привет. Я вот сейчас отцепляю один из поддоменов мультисайта. Хочу вынести его на отдельный домен. А как сделать редирект с одного поддомена мультисайта на другой домен?
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]
Иван, отлично =)
uglion, примеры Ивана должны работать, у меня тоже есть разные примеры касающиеся htaccess, вот тут: elims.org.ua/blog/htaccess-poleznye-primery-koda-dlya-optimizacii-sajta/
Здравствуйте! Очень понравилась Ваша статья. Спасибо! Могли бы Вы объяснить как исправить проблему? После установки все заработало, но ссылки старых записей теперь битые. В комментариях я прочитал что можно сделать редирект по маске. Если Вас не затруднит могли бы Вы объяснить как это сделать? Ничего не понял из объяснений на эту тему из других источников:(
С уважением, Феликс
p.s.
Также не могу создать новую запись. В смысле запись создается но ссылка битая.
Феликс, здравствуйте, по поводу редиректов по маске — читайте о htaccess. Примеры можно посмотреть тут: https://elims.org.ua/blog/htaccess-poleznye-primery-koda-dlya-optimizacii-sajta/
А вот почему новая запись создается с битой ссылкой нужно разобраться. Попытайтесь создать новый подблог в Вашем мультиблоге и там опубликовать запись. И попытайтесь создать тестовый пустой сайт с мультиблогом и попытаться опубликовать запись.
Думаю в ходе этих действий выявите причину битой ссылки =)
Привет, подскажи пожалуйста, создал мультисеть, было все ок, потом при попытке от админа зайти в раздел управления сетью получаю
You do not have permission to access this page.
как не копал — не могу победить.режим подкаталогов
> Послесловие: я настраивал у себя режим работы с подкаталогами, поэтому в этом посте именно на нем акцентировано внимание.
Привет, я так и не понял как перевести на подпапки существующий файл? Спасибо.
И возможна ли одна база пользователей для всех сайтов, или у каждого своя?
существующий файл? Не совсем понял о чем речь.
В мультисайте используется одна база.
Здравствуйте! Хочу реализовать сеть мультисайтов для доски объявлений в вордпресс на одном шаблоне на поддоменах. То есть чтобы было отдельно авто, недвижимость, работа и т. д. Есть идея создать все на разных поддоменах ради того, чтобы распределить нагрузку на сервер и таким образом выиграть не только в аналитике, но и в скорости портала.
Соответственно у меня возникли следующие вопросы:
— При создании мультисайтов (сети сайтов) в вордпресс на поддоменах, каким образом нагрузка распределяется между серверами?
— Как я понимаю данные об авторизации хранятся в единой таблице базы данных. Каким образом эта таблица может управлять всеми поддоменами?
— На каждом поддомене будет своя база данных (физическая), либо же в единой базе данных будут свои таблицы для каждого поддомена (логические)?
— Возможно ли распределить нагрузку между разными серверами или всю мультисеть будет обрабатывать один сервер?
Вы мне очень поможете своими ответами!
С уважением, Виталий Охрименко!
Здравствуйте.
Есть мультисайт. Вчера истекла оплата домена, после оплаты перестали работать сайты на поддоменах. В админке есть настройки мультисайтов, но при переходе на любой из поддоменов переходит к странице 404. В чем может быть проблема?
Спасибо!
если поддомены возвращают 404 — значит они созданы, как я понимаю. правильно?
Попытайтесь восстановиться из резервной копии на тот момент когда домен не истек. Чтобы не гадать в чем может быть проблема.
Подскажите, пожалуйста, как это происходит: вот я создала сеть из двух-трех сайтов. И там пишутся взаимосвязанные стати. То есть один сайт используется как каталог для инфокурсов-там описания курсов, на втором-сами инфокурсы в запароленных записях. Когда пишется, к примеру, описание курса, постоянно лазишь в курс, чтобы посмотреть детали. Если ставить два отдельных сайта, то каждый раз надо пароль вводить и с одного браузера в два сайта не зайдешь. А тут как? То есть цель такая: пишу одновременно на два сайта, оба открыты в одном браузере, просто между страницами перехожу. Это позволяет сделать мультисайт или там как-то иначе?
Может, путано объясняю, но цель-чтобы просто было писать статьи постоянно прыгая туда-сюда. При двух отдельных сайтах это заморочно, а у вас практика есть, как это у вас? Вот вы пишете притчу и вдруг всплы в голове афоризм. И вы думаете-забуду ведь, надо прямо сейчас написать на сайт афоризмов. Бросаете недописанную притчу и идете на сайт афоризмов, чтобы там создать новую запись. Опишите процесс, пожалуйста!
Здравствуйте. Владимир, а возможно-ли одновременное создание сети на поддоменах и в поддиректориях? Я имею ввиду, что один сайт сети у меня на поддомене (site_1.domen.com), а второй после слеша (domen.com/site_2) основного домена. И оба сайта работают. Как этого добиться?