Я настраиваю многоязычную настройку динамически, используя 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, и у меня есть только одна настройка для двух настроек.
Вы можете изменить настройки администратора в файле wp-config.php.
Поэтому, если вы хотите что-то динамическое, должно работать следующее:
define('WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST']);
define('WP_HOME', 'http://' . $_SERVER['HTTP_HOST']);
Это необходимо добавить перед строкой
require_once(ABSPATH . 'wp-settings.php');
или же у вас могут быть проблемы с некоторым контентом, использующим неправильные URL, особенно файлы тем.
Я нашел другой красивый способ добиться этой работы:
После того, как я проверил исходный код ядра, я обнаружил, что существуют различные фильтры, называемые 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
файл, и его можно легко добавить в тему или плагин.