Как установить динамические `home` и` siteurl` в WordPress?

Я настраиваю многоязычную настройку динамически, используя locale фильтр. Который выбирает имя субдомена для определения языка.

function load_custom_language($locale) {
// get the locale code according to the sub-domain name.
// en.mysite.com => return `en`
// zh.mysite.com => return `zh_CN`
// tw.mysite.com => return `zh_TW`
// etc..
}
add_filter('locale', 'load_custom_language');

Это работает для страницы индекса, но когда я перенаправляю на другую страницу, из-за настроек home а также siteurlвсегда перенаправляет мой сайт на оригинальный (www.mysite.com).

Поэтому мне любопытно найти динамический способ фильтрации home а также siteurl согласно запросу, потому что я мог бы использовать более одного субдомена для mysite, и у меня есть только одна настройка для двух настроек.

9

Решение

Вы можете изменить настройки администратора в файле wp-config.php.
Поэтому, если вы хотите что-то динамическое, должно работать следующее:

define('WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST']);
define('WP_HOME', 'http://' . $_SERVER['HTTP_HOST']);

Это необходимо добавить перед строкой

require_once(ABSPATH . 'wp-settings.php');

или же у вас могут быть проблемы с некоторым контентом, использующим неправильные URL, особенно файлы тем.

10

Другие решения

Я нашел другой красивый способ добиться этой работы:

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

Итак, для своей задачи я попытался использовать option_siteurl а также option_home фильтр, чтобы сохранить эти параметры для загрузки, просто чтобы предотвратить возможность загрузки, поддерживая SERVER_NAME она имеет:

function replace_siteurl($val) {
return 'http://'.$_SERVER['HTTP_HOST'];
}
add_filter('option_siteurl', 'replace_siteurl');
add_filter('option_home', 'replace_siteurl');

Используя этот способ, нет необходимости менять wp_config.php файл, и его можно легко добавить в тему или плагин.

4

По вопросам рекламы [email protected]