Валюта магазина WooCommerce в зависимости от роли пользователя

#wordpress #woocommerce #user-roles

#wordpress #woocommerce #роли пользователей

Вопрос:

Я хотел бы переключить валюту моего магазина wordpress / woocommerce на USD, когда имя пользователя, вошедшего в систему, содержит массив «usd».

Я пытался использовать этот код, но он не сработал. Не могли бы вы мне помочь?

Спасибо

 function set_role_currency($currency){
    if( is_user_logged_in() ) {
 $user = wp_get_current_user();
 $roles = ( array ) $user->roles;}
 if (in_array('usd', $roles)) { return 'USD'; }
 return $currency; 
}
add_filter('woocommerce_currency', 'set_role_currency', 10, 2);
  

Комментарии:

1. «имя пользователя содержит массив «usd»» ? Означает ли это, что ваше имя пользователя содержит слово «usd», например: «username_usd» или вы устанавливаете какие-либо роли для пользователя как «usd»?

2. роль пользователя содержит «usd», как дважды проверить, действительно ли роль, с которой сравнивается wordpress, содержит строку «usd»?

Ответ №1:

Возможно, все, что вам нужно, это просто исправить это

 add_filter('woocommerce_currency', 'set_role_currency', 10, 2);
  

Поскольку вы передаете только 1 параметр и, возможно, устанавливаете приоритет позже:

 add_filter('woocommerce_currency', 'set_role_currency', 100, 1);
  

Комментарии:

1. Спасибо за быстрый ответ. Я думаю, что проблема заключается в поиске строки «usd» в массиве пользовательских ролей. Я создал дополнительную роль пользователя с помощью плагина WooCommerce Wholesale Pro и назвал ее «wholesale_usd». Я думаю, что отображаемое имя — «wholesale_usd», но реальное имя за ним другое. Как я могу проверить имя роли пользователя?

2. @Ahmed вы всегда можете использовать встроенные регистраторы WC. $logger = новый WC_Logger(); $logger_name = «Имя моего регистратора»; $logger-> добавить($logger_name,print_r($user-> роли, true));