Несколько блогов на одном движке WordPress и с одной БД
Недавно я рассказывал как сделать несколько WordPress блогов с одной базой данных. Это полезно, если у хостера имеются определенные ограничения на количество БД. Но есть еще более экономное решение — использовать одну установленную систему WordPress. Первый случай может пригодиться, когда у вас есть несколько блогов на хостинге и вы просто добавляете новые проекты, то есть не требуется обновление старых, доработка плагинов и т.п. Они как работали, так и продолжают работать. Второй вариант лучше использовать, если вы изначально планируете создавать сетку блогов или просто несколько простых проектов. Ведь часто кроме ограничения на количество БД у хостеров есть лимиты на занимаемое дисковое пространство — смысл тратить его на одни и те же файлы, плагины.
Кроме того, вы получите хорошую экономию по времени — обновлять плагины можно будет в одном месте, хотя не уверен насчет дальнейшей их активации по отдельности. На самом деле процесс достаточно прост. Используется трюк, как и в прошлой статье, поэтому можете ее прочитать для общего развития.
Первым делом необходимо настроить домены блогов дабы они ссылались в один и тот же каталог. Внимание, я рассказываю как все работает у моего хостера, поэтому не могу на 100% гарантировать такой же алгоритм у вас. Если возникнут вопросы, проще всего обратиться в их службу поддержки (собственно, я так и поступал). Так вот, допустим, есть 3 сайта — site1.ru, site2.ru, site3.ru. При создании их на хостинге, скорее всего, для каждого будет выделена отдельная папка на FTP. Суть метода — направить все домены в одну (главную директорию). Для этого используются алиасы. В админке hqhost, например это выглядит приблизительно так:
Для каждого сайта (домена) редактируем алиасы — для второстепенных (site2.ru, site3.ru) убираем и добавляем их к основному (site1.ru). Пожалуй, повторюсь, если вы мало что поняли в моих словах — лучше обратиться в тех. поддержку хостера, там должны помочь:)
Итак, в результате этой процедуры каждый сайт будет «смотреть» в одну директорию — главного блога. Именно туда мы заливаем все исходники WordPress, плагины, шаблоны. После этого заходим в файл wp-config.php, где находим строку $table_prefix = ‘wp_’; Она задает префикс для таблиц блога, нужно сделать так, чтобы генерировались разные префиксы в зависимости от домена. Для этого используем код:
$prefix = $_SERVER["HTTP_HOST"]; $prefix = str_replace("www.", "", $prefix); $prefix = str_replace("-", "", $prefix); $prefix = str_replace(".", "", $prefix); $table_prefix = $prefix."_" ; |
В итоге вместо wp_ получим префикс site1ru_, site2ru_ и т.п. Можете в последней строке добавить любые символы, например:
$table_prefix = "wp".$prefix."_" ; // получим wpsite1ru_ |
Теперь каждый раз, когда вы будете заходить по тому или иному домену, вы будете видеть тот сайт (блог), который ему соответствует. Поскольку все настройки системы хранятся в БД, то настраивать каждый проект придется по отдельности. Это же касается шаблонов — загружаете все в одну папку, а для блогов выбираете разные.
Работаться в данном методе мне здорово помогла статья в проекте Блог Awtor. Автор пошел еще дальше и дополнил данную установку важными деталями. Речь идет о файлах Robots.txt и sitemap.xml — ведь для каждого сайта они должны быть разные. Для решения этой проблемы создается несколько файлов с идентичными названиями (структурой) robots-site1.ru.txt, robots-site2.ru.txt и sitemap-site1.ru.xml, sitemap-site2.ru.xml. Далее файл .htaccess дополняем конструкцией:
RewriteCond %{REQUEST_FILENAME} /robots.txt$ [NC] RewriteRule ^ /robots-%{HTTP_HOST}.txt [L] RewriteCond %{REQUEST_FILENAME} /sitemap.xml$ [NC] RewriteRule ^ /sitemap-%{HTTP_HOST}.xml [L] |
Теперь при заходе с разных URL адресов будут выбираться нужные файлы.
Еще автор советует для загрузки изображений создавать разные папки в uploads, которые потому указывать в настройках блога. Также он замечает, что в процессе работы возникают нерешенные проблемы с некоторыми плагинами: watermark, md5, дополнительное кеширование. В принципе, в 95% случаев, думаю, без них можно обойтись, поэтому данный момент не столь критичен. Если создавать, например, простые сателлиты, то хватит и стандартного набора плагинов.
Вот, кстати, нашел в сети еще один вариант реализации нескольких сайтов на одном движке wordpress. Там подход несколько иной, позволяющий для каждого сайта использовать отдельный конфиг файл. А это значит, что теоретически можно под одной админкой объединить даже сайты с разных баз данных.
Также в процессе поиска решения наткнулся на статью с официального сайта, где собраны различные реализации для нескольких проектов — от блогохостингов до целых блого-ферм.
P.S. Я сейчас не в Киеве, поэтому не отвечаю на письма и не модерирую комментарии, приеду в субботу — все сделаю.
Доверьте создание сателлитов профессионалам — качественные оригинальные тексты, дизайн. Разработка проектов под ключ.
Сам на выходных заморочился, всё получилось. На одной базе на одном движке. Вопрос возник только с тем, как SAPE прикрутить, ведь папка то одна будет. На форуме в принципе предложили решение, там поменять переменную одну, или ещё посоветовали плагином, пока не пробовал, так как ещё рано эти площадки в сапу добавлять, но услышать решение работающее было бы интересно :)
Проблема может возникнуть с плагинами, которые при обновлении себя до новой версии вносят изменения в базу. Т.к. при обновлении изменения затронут только активную базу, то в других сайтах обновленные файлы плагинов не найдут изменения в базе. Но думаю таких не много.
Lesso, с Сапой я пока не задумывался. Как придет время, тоже загляну на их форум в поисках ответа, либо в тех.поддержку. Уверен, подобные «сборки» люди уже используют. С другой стороны нужно быть осторожным — здесь один ip, и если продавать кучи ссылок, сайты скорее всего пойдут в бан.
Valentin, хм, тоже правильное замечание. В таком случае нужно будет придумать какие-то хитрости чтобы обновить БД для всех сайтов. Хотя, в принципе, это весьма трудоемко, да и использовать такие конструкции лучше для простых проектов — где минимум функциональности. Те же сателлиты.
Насчёт ip не уверен, ну если 100 штук дклать, то да, нe у одного моего хостера 1 ip, и что, на нём хостится 100+ площадок, да и не думаю, что та же agava раздаёт каждому по отдельному ip адресу, поэтому это всё спорные моменты.
хочу сделать вышеописанное со своими поддоменами. не получается. во-первых, в какой папке они должны быть? например, у меня основной сайт здесь: root/sitecom/www, в www- весь ВП. домен здесь: root/sitecom/subdomain. так надо?
во-вторых, при создании поддомена в нужной директории или при изменении др. доменов, чтобы они в общую папку обращались, таблицы в БД сами создаются? если да, то после этого при загрузке поддомена в браузере уже должно что-то показыватся, видимо дефолтовая тема ВП?
в-третьих, каким образом я могу управлять поддоменом из общей админки ВП? где там что нужно менять, чтобы показывало нужный поддомен?
Анна, речь идет об отдельных доменах, а не субдоменах. Для них я не пробовал ничего такого создавать, возможно там какие-то свои особенности.
1. Заливать ВП нужно в одну папку — пусть это будет root/sitecom/www и для всех доменов указываете алиасы (чтобы они обращались) к этой самой директории.
2. После этого заходите по адресам site1.ru и site2.ru и отдельно настраиваете блог (создается БД автоматически). То есть все то же самое, что и при создании одного блога — система как-бы видит для каждого из доменов свой отдельный проект.
3. Опять же повторюсь, речь не о поддоменах и при заходе в админку вы никак не увидите наличие дополнительных сайтов на этой ВП, куда можно переключиться. Они все никак не связаны.
Народ, помогите думаю как реализовать, нужно чтоб 2 домена использовали одну базу. Но в этой базе прописаны url на посты и картинки. Соответсвенно для одного домена нужно на лету менять эти значения с site1.com на site2.com
@Valentin:
Не уверен. Давайте порассуждаем: вот мы загрузили такой плагин «нехороший». Дальше, что? Мы должны его активировать. Допустим зашли в админку site1. Активировали. Он внес изменение и в админке появились его настройки (если есть). Дальше, что? Ну, можем, например, сразу зайти в админку site2 и… снова активировать его, чтоб он опять внес свои «нехорошие» изменения в таблицы БД.
Отсюда вывод: теоретизировать хорошо, но эксперемент покажет who is who :) Предлагайте штучки три «нехороших» плагина — поэксперементируем :)
Diplomat, в настройках блога можно задавать папку из которой берутся картинки — то есть для каждого блога отдельно. Если я правильно понял вопрос.
Александр, все правильно, нужно просто для каждого сайта заходить в админку и обновлять плагин — это не так сложно.
Использовал плагин domain mirror. все работает. Правда теперь захотелось сделать общую базу с комментариями и разным контентом на блогах.. ну это нереально похоже
с сапой вопрос не решенный?
С сапой, признаться, это все не пробовал, а что могут быть проблемы? Залил на фпт, прописал код в каждом из шаблонов, а сапа уже сама должна определять для какого сайта что делать или нет?
Анна — для вашего случая есть специальное решение, оно называется WordPress MU !! Основное
отличие этого решения и как раз и состоит в том, что оно для поддоменов, а не для отдельных доменов.
сапа решена уже давно — там в коде можно включить мультисайтинг и к линкс дб будет добавляться префикс вида site1_links.db
я использовал плагин imoney — он поумолчанию файл сапы обзывает как надо
Вот чем хорошо или плохо давать в тексте ссылки на другие сайты… В тексте этого поста со слов «еще один вариант» идет ссылка на заметку, которую интересно было бы прочитать, но сайта уже нет как такового и ссылка показывает теперь на что зря. А если бы их метод был полностью описан в тексте этой же заметки (пусть даже со ссылкой на их сайт), то было бы намного лучше. Теперь решение потерялось, наверно.
Интересный вариант решения проблемы, однако есть также вариант, когда мы просто делаем подблог в одной из категорий и немного перенастраиваем движок, как это сделать я описал у себя в блоге в статье Создание подблога в WordPress.
я знаю еще один способ который оказывается не упомянут в той официальной статье: wpmu с плагином отображения субдоменов на любой домен http://ocaoimh.ie/wordpress-mu-domain-mapping/
Попробую, что это за штука такая получится с одним Вордпрессом.
Написал в суппорт хостинга, т.к. у меня есть только доступ к cPanel. Они ответили вот что:
«Движок размещаете в папке public_html, а все доменные имена добавляете в паркованные в итоге они будут алиасами на основной домен.»
Это действительно будет аналогично тому, что описано в этой статье?
Роман, по идее, да, мне тоже про алиасы говорили для основного домена. Попробуй будет ли это все работать.
А опишите пожалуйста, что такое этот WordPress MU !! .
WordPress MU — многопользовательская система для нескольких блогов под управлением одной системы. С запуском WordPress 3.0 поддержка WordPress MU была прекращена и весь функционал добавили в стандартный WordPress.
Спасибо за пост, скажите, а Вы могли бы прокомментировать где-то свой Robots.txt? потому что я посмотрел он у вас как-то своеобразно написан, интересно почитать мысли о Вашем robots.txt
Евгений, да, надо будет как-то написать про роботс.тхт, у меня в блоге он, видимо, немного устаревший, давно не правил.
Ну видимо да, так как я к примеру закрыл комментарии фиды, трекбеки, страници регистрации и так далее, а и еще теги закрыл! :)
Спасибо за статью, очень информативно и много нового, но с нижеуказанным (так как я новичек в WP) мне довольно тяжело разобраться.
Можете привести пример хотя бы взяв 2 сайта: site1.com.ua и site2.kiev.ua
Тут ничего не понимаю, что именно нужно прописывать (или просто так оставить):
$prefix = $_SERVER[«HTTP_HOST»];
$prefix = str_replace(«www.», «», $prefix);
$prefix = str_replace(«-«, «», $prefix);
$prefix = str_replace(«.», «», $prefix);
$table_prefix = $prefix.»_» ;
Роман, это «общий код» который работает для всех случаев независимо от ваших доменов. Просто в результате получится разный префикс для таблиц базы данных — site1comua_ и site2kievua_. То есть вордпресс подключается в одной и той же базе данных, но берет таблицы определенного префикса, в зависимости от того на какой домен заходим.
А возможно ли пойти дальше и немного в сторону? База общая (с одним и тем же префиксом), за исключением _users и _usermeta.
Скажу честно, даже это решение уже является немного извращенным и может вызвать некоторые проблемы, как мне кажется. Поэтому проще заказать на хостинге какой-то тариф, где можно было бы использовать несколько баз данных и сайтов. Префикс думаю один использовать нельзя. А вообще, кстати, еще советую глянуть в сторону создания сети сайтов на одном вордпресс — wordpress mu или как там его. Я точно в этом не разбирался, но по моему в последних версиях можно как-то программно все это решить.
Спасибо за ответ на мой предыдущий вопрос )