switch_to_locale()
Позволяет программно переключить язык сайта.
Одна из нескольких функции введенных в WP 4.7 для управления переводом сайта для отдельного пользователя.
Функция будет работать только если пользователь установил какой-либо язык перевода в настройках профиля (любой даже «язык сайта»). Или если пользователь регистировался в версии WP 4.7 или выше. Но если вы обновили версию сайта, а пользователь еще не выбирал язык перевода, то локаль переключаться не будет. Возможно в будущем это поправят...
Чтобы проверить переключена ли локаль в текущий момент, используйте функцию is_locale_switched().
Хуки при переключении локали:
При переключении локали срабатывают несколько событий:
-
change_locale - срабатывает когда локаль уже изменена. Ядро использует его, чтобы пере-создать типы записей и таксономий.
-
switch_locale - срабатывает когда локаль переключена.
- restore_previous_locale - срабатывает, когда локаль возвращена к предыдущей.
Хуков нет.
Возвращает
true|false
. True on success, false on failure.
Использование
switch_to_locale( $locale );
- $locale(строка) (обязательный)
Название локали, на которую нужно переключиться. Например:
ru_RU
илиen_US
.Полный список локалей смотрите здесь
Примеры
#1 Переключим язык сайта на лету
Допустим наш сайт работает на русском, но в админке нам нужен английский язык. Тогда вставляем такой код в functions.php темы:
if( is_admin() ) switch_to_locale('en_US');
Можно через хук:
add_action('init', function(){ switch_to_locale('en_US'); });
#2 Установим язык админки по условию
Допустим, мы определяем локаль пользователя по IP и записываем эти данные в куку user_locale
. Так мы знаем с какой страны пришел пользователь и можем выставить ему язык сайта на лету:
add_action('init', function(){ if( isset($_COOKIE['user_locale']) ) switch_to_locale( $_COOKIE['user_locale'] ); }
Заметки
- Global. WP_Locale_Switcher. $wp_locale_switcher WordPress locale switcher object.
Список изменений
С версии 4.7.0 | Введена. |
Код switch_to_locale() switch to locale WP 6.6.1
function switch_to_locale( $locale ) { /* @var WP_Locale_Switcher $wp_locale_switcher */ global $wp_locale_switcher; if ( ! $wp_locale_switcher ) { return false; } return $wp_locale_switcher->switch_to_locale( $locale ); }