Поддержка Проблемы и решения WordPress и алиасы

  • Здравствуйте. Есть следующая проблема.
    Стоит на одном из сайтов wordpress, домен, к примеру, site.ru. Мне необходимо сделать так, чтобы при обращении к другому моему домену, например site.com открывался этот же сайт, но не переадресовывало на site.ru, а открывалось именно site.com, переходя по внутренним разделам чтобы url имели вид к примеру site.com/news/ и т. д.
    Я настроил алиас, при запросе site.com открывается нужный сайт, все ок. Но стоит мне перейти по ссылке например в новости, как url становится site.ru/news/
    В базе в таблицах ведь в абсолютном виде указан домен.. Есть способ сделать то, что я описал в начале?
    Буду очень благодарен за помощь, спасибо!

Просмотр 9 ответов — с 1 по 9 (всего 9)
  • Есть способ сделать то, что я описал в начале?

    В ВП — нет.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Есть способ сделать то, что я описал в начале?

    Да, добавьте фрагмент в wp-config.php:

    define( 'WP_HOME', "http://{$_SERVER['HTTP_HOST']}" );
    define( 'WP_SITEURL', "http://{$_SERVER['HTTP_HOST']}" );
    
    ob_start( 'ob_replace_home_url' );
    function ob_replace_home_url( $string ) {
    	$output = str_replace( 'http://site.ru', WP_HOME, $output );
    	$output = str_replace( 'http://site.com', WP_HOME, $output );
    	return $output;
    }

    Да,

    Сергей, а какими будут адреса мультимедии и внутренних ссылок при вставке их например в пост? Абсолютными или относительными?
    А при создании произвольного меню?

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Все адреса будут абсолютными, с тем доменом, через который зашли.

    Ссылки в контенте будут меняться на лету функцией ob_replace_home_url().

    Ссылки в контенте будут меняться на лету

    Жесть 🙂
    ОК, спасибо, бум знать.

    Есть способ сделать то, что я описал в начале?

    Да, добавьте фрагмент в wp-config.php:

    define( 'WP_HOME',  "http://{$_SERVER['HTTP_HOST']}" );
    define( 'WP_SITEURL', "http://{$_SERVER['HTTP_HOST']}" );
    
    ob_start( 'ob_replace_home_url' );
    function ob_replace_home_url( $string ) {
    	$output = str_replace( 'http://site.ru', WP_HOME, $output );
    	$output = str_replace( 'http://site.com', WP_HOME, $output );
    	return $output;
    }

    Я не совсем понял, что я должен вводить тут:

    $output = str_replace( 'http://site.ru', WP_HOME, $output );
    $output = str_replace( 'http://site.com', WP_HOME, $output );

    Вместо http://site.ru основной домен, а вместо .com — алиас? Сделал — выдает просто белую страницу.. И что делать если у меня 3-4 алиаса?

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Вместо http://site.ru основной домен, а вместо .com — алиас?

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

    Сделал — выдает просто белую страницу.

    Нужно убедиться, что нет ошибки синтаксиса. Включите отображение ошибок или посмотрите текст ошибки в логах: http://codex.wordpress.org/ЧАВО/Белый_экран.

    И что делать если у меня 3-4 алиаса?

    См. ответ в пункте 1, может быть достаточно только первой строки.

    Если есть вероятность, что сайт будет наполняться и через алиасы, можно добавить строчку для каждого из них. Или перечислить в виде массшива:

    $aliases = array( 'http://site.ru', 'http://site.com', 'http://site1.com', 'http://site2.com' );
    $output = str_replace( $aliases, WP_HOME, $output );

    Да, забыл сказать — спасибо за ответ. Сайт не будет наполняться через алиасы.
    Оставил только первую сроку — тоже белый экран. Попробую разобраться.
    Кстати, я попробовал убрать вообще код начиная с «ob_start» — все заработало.
    Но есть один нюанс.. У меня установлен плагин мультиязычности — WPML. То есть на сайте есть директория /en/ где лежит перевод всех страниц. Так вот если оставить первую часть кода, что вы приводили — все работает, кроме как раз перевода. То есть если я переключаюсь в англ. язык — то выдает 404..

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Оставил только первую сроку — тоже белый экран.

    В общем случае такой реакции на ob_start() нет, стоит всё же посмотреть в логах текст ошибки.

    То есть если я переключаюсь в англ. язык — то выдает 404.

    Т.е. на алиасе страница вида site.com/page отображается, а site.com/en/page — нет? А на site.ru отображаются обе?

    Видимо, это особенность плагина WPML — здесь у меня решения пока нет.

Просмотр 9 ответов — с 1 по 9 (всего 9)
  • Тема «WordPress и алиасы» закрыта для новых ответов.