@RigidStyle

Как взять текущего пользователя в цикле WP в плагине?

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

Суть в том, что код меняет язык через "switch_to_locale()", при этом меняет язык на язык пользователя, который сейчас залогинен, берется через "get_user_locale()" после проверки "is_user_logged_in()".
Но если запихать этот код в плагин, то получаем, что когда код срабатывает, пользователь еще не определен (нагуглил), но если же повесить определение пользователя на событие после инициализации ворпресс (init), то не сработает "switch_to_locale()".
Сам код (если очень сокращенно)

function current_user_locale_language() {
    if (is_user_logged_in()) {											
    	$logged_in_user_locale = get_user_locale();
    	if ( in_array( $logged_in_user_locale, array( 'en_US', 'en_AU', 'en_CA', 'en_GB' ) ) ) {		
		$user_locale = 'en_US';
	} elseif ( in_array( $logged_in_user_locale, array( 'ru_RU', 'ru_UA' ) ) ) {				
		$user_locale = 'ru_RU';
	} else {												
		$user_locale = get_locale();
	}

    } else {
$user_locale = get_locale();
}
return $user_locale;
}
switch_to_locale(current_user_locale_language());


Как правильно определять пользователя в цикле ворпресс в плагинах?
  • Вопрос задан
  • 119 просмотров
Пригласить эксперта
Ответы на вопрос 1
trampick
@trampick
Веб-разработчик
Ваш код не пробовал использовать. Если проблема именно в порядке вызова то можно как вариант использовать куки.
в switch_to_locale указываем то что хранится в куках, если ничего нет, то значение по умолчанию или вообще не вызывать switch_to_locale.
current_user_locale_language() повесить на init раз оно там работает. Добавляем проверку на есть ли значение в куках, если есть, то ничего не делаем, если нет то выполняем код скрипта и вместо return $user_locale сохраняем полученное значение в куки и делаем перезагрузку страницы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы