#php #wordpress #woocommerce #user-roles #tax
#php #wordpress #woocommerce #роли пользователей #налог
Вопрос:
На моем веб-сайте WooCommerce я собираюсь продавать дистрибьюторам И реселлерам. Проблема в том, что реселлеры освобождены от НАЛОГОВ, и поэтому мне нужна пользовательская функция для включения нулевой ставки налога для определенных ролей клиентов (было бы оптимально, если бы WooCommerce делала это самостоятельно, но это не так).
Итак, моя проблема в том, что код, который у меня есть, работает идеально, за исключением того, что я не знаю, как реализовать изменение для расчета нулевых налогов, если клиент является администратором ИЛИ реселлером.
Вот код, который я использую:
function wc_diff_rate_for_user( $tax_class, $product ) {
if ( is_user_logged_in() amp;amp; current_user_can( 'administrator' ) ) {
$tax_class = 'Zero Rate';
}
return $tax_class;
}
add_filter( 'woocommerce_product_tax_class', 'wc_diff_rate_for_user', 1, 2 );
Как я могу изменить этот код, чтобы он работал для этих ролей пользователей?
Спасибо
Комментарии:
1. Простой оператор if должен работать для вас. Если $tax_class == ‘Нулевая ставка’, то не рассчитывайте дополнительный налог. В противном случае рассчитайте дополнительный налог. Возможно, поделитесь своим кодом?
Ответ №1:
обновление 2020
Попробуйте эту настраиваемую функцию, основанную на вашем коде, где я сначала получаю текущие роли пользователей. Затем я использую in_array()
условную функцию php в операторе if, чтобы сравнить ваши 2 целевые роли с текущими пользовательскими ролями. Таким образом, я включаю или нет этот налоговый класс с нулевой ставкой.
Вот код:
function wc_diff_rate_for_user( $tax_class, $product ) {
// Getting the current user
$current_user = wp_get_current_user();
$current_user_data = get_userdata($current_user->ID);
if ( in_array( 'administrator', $current_user_data->roles ) || in_array( 'reseller', $current_user_data->roles ) )
$tax_class = 'Zero Rate';
return $tax_class;
}
add_filter( 'woocommerce_product_tax_class', 'wc_diff_rate_for_user', 1, 2 );
Обновление — начиная с WooCommerce 3, вместо этого используйте следующее:
function wc_diff_rate_for_user( $tax_class, $product ) {
// Getting the current user
$current_user = wp_get_current_user();
$current_user_data = get_userdata($current_user->ID);
if ( in_array( 'administrator', $current_user_data->roles ) || in_array( 'reseller', $current_user_data->roles ) )
$tax_class = 'Zero Rate';
return $tax_class;
}
add_filter( 'woocommerce_product_get_tax_class', 'wc_diff_rate_for_user', 10, 2 );
add_filter( 'woocommerce_product_variation_get_tax_class', 'wc_diff_rate_for_user', 10, 2 );
Этот код входит functions.php файл вашей активной дочерней темы (или темы) или также в любом файле плагина.
Этот код протестирован и полностью функционален.
Комментарии:
1. Как всегда, вы гениальный человек… что бы я делал без тебя … XD
2. очень полезно, wc guru.