switch_to_locale()
Дозволяє програмно переключити мову сайту.
Одна з кількох функцій, введених у WP 4.7 для керування перекладом сайту для окремого користувача.
Функція буде працювати тільки якщо користувач встановив будь-яку мову перекладу в налаштуваннях профілю (будь-яка навіть «мова сайту»). Або якщо користувач реєструвався у WP версії 4.7 або вище. Але якщо ви оновили версію сайту, а користувач ще не вибирав мову перекладу, локаль перемикатися не буде. Можливо в майбутньому це виправлять…
Щоб перевірити переключена локаль у поточний момент, використовуйте функцію is_locale_switched() .
Хуки при перемиканні локалі:
При перемиканні локалі спрацьовують кілька подій:
change_locale – спрацьовує, коли локаль вже змінена. Ядро використовує його, щоб перетворити типи записів і таксономій.
switch_locale – спрацьовує коли локаль перемикається.
- restore_previous_locale – спрацьовує, коли локаль повернуто до попередньої.
WP_Locale_Switcher::switch_to_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 об’єкт.
список змін
| З версії 4.7.0 | Введено. |
Код switch_to_locale() switch to locale WP 6.0.2
function switch_to_locale( $locale ) {
/* @var WP_Locale_Switcher $wp_locale_switcher */
Global $wp_locale_switcher;
return $wp_locale_switcher->switch_to_locale( $locale );
}