Несколько блогов на одном движке Wordpress и с одной БД

Thursday, 09 Apr 09 в 22:51

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. Я сейчас не в Киеве, поэтому не отвечаю на письма и не модерирую комментарии, приеду в субботу – все сделаю.

Доверьте создание сателлитов профессионалам – качественные оригинальные тексты, дизайн. Разработка проектов под ключ.

Смотрим креативные и яркие дизайны сайтов для вдохновения.

Желающих похудеть – гречневая диета.

Понравился пост? Подпишись на обновления блога по RSS для блоггеров и вебмастеровRSS, RSS для блоггеров и вебмастеровEmail или twitter для блоггеров и вебмастеровtwitter!
Добавить комментарий

Комментариев - 19 для данного поста

  1. Lesso Пишет:

    Сам на выходных заморочился, всё получилось. На одной базе на одном движке. Вопрос возник только с тем, как SAPE прикрутить, ведь папка то одна будет. На форуме в принципе предложили решение, там поменять переменную одну, или ещё посоветовали плагином, пока не пробовал, так как ещё рано эти площадки в сапу добавлять, но услышать решение работающее было бы интересно :)

  2. Valentin Пишет:

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

  3. @ Жизнь Замечательного Человека » Blog Archive » Интересное (или полезное) из блогосферы за неделю 6-12 апреля Пишет:

    [...] Запускаем несколько блогов на одном движке WP и с одн

  4. Tod Пишет:

    Lesso, с Сапой я пока не задумывался. Как придет время, тоже загляну на их форум в поисках ответа, либо в тех.поддержку. Уверен, подобные “сборки” люди уже используют. С другой стороны нужно быть осторожным – здесь один ip, и если продавать кучи ссылок, сайты скорее всего пойдут в бан.

    Valentin, хм, тоже правильное замечание. В таком случае нужно будет придумать какие-то хитрости чтобы обновить БД для всех сайтов. Хотя, в принципе, это весьма трудоемко, да и использовать такие конструкции лучше для простых проектов – где минимум функциональности. Те же сателлиты.

  5. Lesso Пишет:

    Насчёт ip не уверен, ну если 100 штук дклать, то да, нe у одного моего хостера 1 ip, и что, на нём хостится 100+ площадок, да и не думаю, что та же agava раздаёт каждому по отдельному ip адресу, поэтому это всё спорные моменты.

  6. Анна Пишет:

    хочу сделать вышеописанное со своими поддоменами. не получается. во-первых, в какой папке они должны быть? например, у меня основной сайт здесь: root/sitecom/www, в www- весь ВП. домен здесь: root/sitecom/subdomain. так надо?
    во-вторых, при создании поддомена в нужной директории или при изменении др. доменов, чтобы они в общую папку обращались, таблицы в БД сами создаются? если да, то после этого при загрузке поддомена в браузере уже должно что-то показыватся, видимо дефолтовая тема ВП?
    в-третьих, каким образом я могу управлять поддоменом из общей админки ВП? где там что нужно менять, чтобы показывало нужный поддомен?

  7. Tod Пишет:

    Анна, речь идет об отдельных доменах, а не субдоменах. Для них я не пробовал ничего такого создавать, возможно там какие-то свои особенности.
    1. Заливать ВП нужно в одну папку – пусть это будет root/sitecom/www и для всех доменов указываете алиасы (чтобы они обращались) к этой самой директории.
    2. После этого заходите по адресам site1.ru и site2.ru и отдельно настраиваете блог (создается БД автоматически). То есть все то же самое, что и при создании одного блога – система как-бы видит для каждого из доменов свой отдельный проект.
    3. Опять же повторюсь, речь не о поддоменах и при заходе в админку вы никак не увидите наличие дополнительных сайтов на этой ВП, куда можно переключиться. Они все никак не связаны.

  8. @ Diplomat Пишет:

    Народ, помогите думаю как реализовать, нужно чтоб 2 домена использовали одну базу. Но в этой базе прописаны url на посты и картинки. Соответсвенно для одного домена нужно на лету менять эти значения с site1.com на site2.com

  9. @ Александр Пишет:

    @Valentin:
    Не уверен. Давайте порассуждаем: вот мы загрузили такой плагин «нехороший». Дальше, что? Мы должны его активировать. Допустим зашли в админку site1. Активировали. Он внес изменение и в админке появились его настройки (если есть). Дальше, что? Ну, можем, например, сразу зайти в админку site2 и… снова активировать его, чтоб он опять внес свои «нехорошие» изменения в таблицы БД.

    Отсюда вывод: теоретизировать хорошо, но эксперемент покажет who is who :) Предлагайте штучки три «нехороших» плагина – поэксперементируем :)

  10. Tod Пишет:

    Diplomat, в настройках блога можно задавать папку из которой берутся картинки – то есть для каждого блога отдельно. Если я правильно понял вопрос.
    Александр, все правильно, нужно просто для каждого сайта заходить в админку и обновлять плагин – это не так сложно.

  11. @ Diplomat Пишет:

    Использовал плагин domain mirror. все работает. Правда теперь захотелось сделать общую базу с комментариями и разным контентом на блогах.. ну это нереально похоже

  12. devul Пишет:

    с сапой вопрос не решенный?

  13. Tod Пишет:

    С сапой, признаться, это все не пробовал, а что могут быть проблемы? Залил на фпт, прописал код в каждом из шаблонов, а сапа уже сама должна определять для какого сайта что делать или нет?

  14. MaximL Пишет:

    Анна – для вашего случая есть специальное решение, оно называется WordPress MU !! Основное
    отличие этого решения и как раз и состоит в том, что оно для поддоменов, а не для отдельных доменов.

  15. Webman Пишет:

    сапа решена уже давно – там в коде можно включить мультисайтинг и к линкс дб будет добавляться префикс вида site1_links.db
    я использовал плагин imoney – он поумолчанию файл сапы обзывает как надо

  16. @ masterseo Пишет:

    Вот чем хорошо или плохо давать в тексте ссылки на другие сайты… В тексте этого поста со слов “еще один вариант” идет ссылка на заметку, которую интересно было бы прочитать, но сайта уже нет как такового и ссылка показывает теперь на что зря. А если бы их метод был полностью описан в тексте этой же заметки (пусть даже со ссылкой на их сайт), то было бы намного лучше. Теперь решение потерялось, наверно.

  17. rvnikita Пишет:

    Интересный вариант решения проблемы, однако есть также вариант, когда мы просто делаем подблог в одной из категорий и немного перенастраиваем движок, как это сделать я описал у себя в блоге в статье Создание подблога в Wordpress.

  18. Динар Пишет:

    я знаю еще один способ который оказывается не упомянут в той официальной статье: wpmu с плагином отображения субдоменов на любой домен http://ocaoimh.ie/wordpress-mu-domain-mapping/

  19. @ Romashkin Пишет:

    Попробую, что это за штука такая получится с одним Вордпрессом.

Оставить комментарий (правила комментирования)