Настройте класс доставки на основе класса налога на продукт в WooCommerce - PullRequest
0 голосов
/ 26 ноября 2018

В настоящее время я пытаюсь внедрить динамическое налогообложение продуктов и доставки в WooCommerce.До сих пор я использовал этот метод: Документация WooCommerce о налоговых классах и ролях пользователей

для настройки налогового класса товаров, добавляемых в корзину на основе данных пользователей.Эти данные - это пользовательский флажок в административной области, который я создал.Если этот флажок установлен, пользователь должен получить налог с нулевой ставкой.

В большинстве случаев это работает, как и ожидалось, но в итоге создает две проблемы, которые я не могу решить.

1) Страница оформления заказа никогда не загружается полностью (на панелях «Сводка заказа» и «Опция оплаты» постоянно отображаются значки «Загрузка») и

2) Налог на доставку не обновляется.В частности, если перейти от налогового класса, в котором есть налог с продаж и налог на доставку, к налогу с нулевой ставкой, налог с продаж обновляется правильно (нет), но при этом налог на доставку все равно применяется.

У меня естьналоговые ставки, установленные в настройках WooCommerce (нулевая ставка не облагается налогом на доставку), но без изменений.

Я использую этот фильтр, чтобы применить изменение:

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

Может ли кто-нибудь помочь мне правильно установить тарифы на доставку для корзины и оформления заказа?

1 Ответ

0 голосов
/ 27 ноября 2018

Существует лучший способ , если вы хотите, чтобы определенная роль пользователя была освобождена от налогов.Класс WC_Customer обладает интересным свойством "is_vat_exempt" .

Можно установить для всех клиентов из определенной роли пользователя значение «Без НДС», используя это:

add_action( 'template_redirect', 'is_user_vat_exempt' );
function is_user_vat_exempt(){
    // Only for logged in users
    if ( ! is_user_logged_in() ) 
        return; 

    // Set specific user role "Vat exempt" if is not set yet
    if ( current_user_can( 'some_user_role' ) && ! WC()->customer->is_vat_exempt() ) {
        WC()->customer->set_is_vat_exempt( true );
    }   
}

Код входит в функцию.PHP-файл вашей активной дочерней темы (или активной темы).Протестировано и работает.

Это решит все ваши проблемы, и вам нужно будет удалить связанный код, который больше не нужен.

...