WooCommerce - Включение налогового класса с нулевой ставкой для некоторых конкретных ролей пользователей

На веб-сайте WooCommerce я буду продавать дистрибьюторам И реселлерам. Проблема в том, что реселлеры освобождены от НАЛОГОВ, и поэтому мне нужна настраиваемая функция, чтобы включить нулевую ставку налога для определенных ролей клиентов (было бы оптимальным, если бы WooCommerce сделал это самостоятельно, но не ).

Итак, моя проблема в том, что код, который у меня есть, работает идеально, за исключением того, что я не знаю, как реализовать изменение для расчета нулевых налогов, если клиент является администратором ИЛИ торговым посредником.

Вот код, который я использую:

function wc_diff_rate_for_user( $tax_class, $product ) {

    if ( is_user_logged_in() && current_user_can( 'administrator' ) ) {
        $tax_class = 'Zero Rate';
    }
    return $tax_class;
}

add_filter( 'woocommerce_product_tax_class', 'wc_diff_rate_for_user', 1, 2 );

Как я могу изменить этот код, чтобы он работал для этих ролей пользователей?

Спасибо


person Andres Molina Perez-Tome    schedule 03.10.2016    source источник
comment
Вам подойдет простой оператор if. Если $ tax_class == 'Zero Rate', дополнительный налог не рассчитывается. В противном случае рассчитайте дополнительный налог. Может, поделитесь своим кодом?   -  person mba12    schedule 03.10.2016


Ответы (1)


Обновление 2020 г.

Попробуйте эту настраиваемую функцию на основе вашего кода, где я сначала получаю текущие роли пользователя. Затем я использую условную функцию in_array() php в операторе if, чтобы сравнить две ваши целевые роли с текущими ролями пользователей. Таким образом, я включаю или отключаю этот налоговый класс «Нулевая ставка».

Вот код:

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 вашей активной дочерней темы (или темы) или также в любом файле плагина.

Этот код протестирован и полностью работоспособен.

person LoicTheAztec    schedule 03.10.2016
comment
Как всегда, ты гениальный человек ... что бы я без тебя делал ... XD - person Andres Molina Perez-Tome; 04.10.2016
comment
очень полезно, гуру туалета. - person Alchem; 08.05.2019