Мультисайтинг в WordPress – чиним логин

В WordPress 3 есть возможность делать мультиблоги, но в данный момент блоги можно делать только на поддомен или в какую-нибудь директорию. Хочется как в Drupal – одна инсталляция и несколько сайтов с доменом второго уровня.

В управлении сайтом можно вбить вместо sub.example.com желаемый newexample.com. Будут работать два сайта, но логиниться в панель управления можно будет только в example.com. Если попробовать залогиниться в newexample.com, то ничего не выйдет – куки всё равно будут приходить для example.com.

Пока не появилась родная поддержка сделал так:

в wp-includes/ms-default-constants.php в функции ms_cookie_constants() изменил строку

define('COOKIE_DOMAIN', '.' . $current_site->cookie_domain);

на

define('COOKIE_DOMAIN', '.' . $_SERVER[SERVER_NAME]);

На тестовом сайте всё заработало, сделал на хостинге – не логинится. Как выяснилось, у хостера в файле конфигурации сайта по умолчанию стоял UseCanonicalName On. Нужно в <VirtualHost> поставить UseCanonicalName Off.

И ещё один нюанс. Всё это замечательно работает для http://newexample.com/. Если в управлении сайтом поставить http://www.newexample.com/, то всё будет работать замечательно, пока мы не попытаемся обратиться к http://newexample.com/. Нас перенесёт на http://example.com/wp-signup.php?new=newexample.com. Нужно будет сделать редирект в .htaccess:

RewriteCond %{HTTP_HOST} ^newexample\.com$
RewriteRule ^(.*)$ http://www.newexample\.com/$1 [R=301,L]

Также, следует понимать, что это полнейшие костыли, и до тех пор, пока не сделают нормальную поддержку, лучше на критически-важных сайтах не использовать.

UPD

Так как хакать ядро нехорошо, в wp-includes/ms-default-constants.php вернул всё как было, а в wp-config.php добавил

define('COOKIE_DOMAIN', '.' . $_SERVER[SERVER_NAME]);

Однако, если у хостера стоит UseCanonicalName On, и изменить нельзя, то в wp-includes/ms-default-constants.php вместо ранее указанного варианта можно прописать

define('COOKIE_DOMAIN', '.' . str_replace('http://', '', get_bloginfo('url')));

7 комментариев к “Мультисайтинг в WordPress – чиним логин”

  1. спасибо, помогло, хотя полдня убила. смущает только то, что одинаковый пароль в основном сайте и «прикрепленном». впечатление, что еще где-то пройдет склейка….

    Ответить
    • Всё нормально – в панели управления теперь можно создавать пользователей, и потом в редактировании информации о сайте присваивать этим пользователям роли для каждого сайта. Пользователя admin можно оставить глобальным для всех, а для каждого сайта сделать своего пользователя с правами, например, редактора.

      Ответить
  2. это да, это увидела.
    однако пришлось через поиск найти блог опять)))
    перебрасывает без www/ на основной. Думаю, где-то я уже это читала =)

    не помогает rewrite с 301 редиректом. тупо пересмотрела все.
    где-то оно перебивается? буду искать, спасибо за инфу

    добавьте подписку на комменты…

    Ответить
    • Эх, времени пока хватает только комментировать. Постараюсь как-нить добавить.
      Рад, что разобрались =)

      Ответить
  3. спасибо=)
    а еще проблемы при указании одинаковых ящиков..
    но самое противное, это то, что в функции wp_post нет параметра id блога
    пришлось брать методы wpdb, чтобы постить напрямую, но при этом все же есть косяки
    если вы кодер и в сео притом, то понимаете для чего и зачем это…

    Ответить

Оставьте комментарий