Условно изменить налоговый класс товаров через хуки в WooCommerce - PullRequest
1 голос
/ 21 мая 2019

Я внедрил область b2b в свой WooCommerce Shop около 18 месяцев назад. Недавно я обновил все плагины и сам WordPress. Переключение налогового класса на переменные продукты больше не работает. Код ниже работал до сих пор, но перестал работать. Чего мне не хватает?

add_filter('woocommerce_product_get_price', 'switch_price', 99, 2);
add_filter('woocommerce_product_variation_get_price', 'switch_price', 99, 2);
function switch_price($price, $product){

    if(isset($_COOKIE["customerType"])){
      if($_COOKIE["customerType"] == "business"){
          $product->set_tax_class("Zero Rate");
      }
    }

    return $price;
}

1 Ответ

0 голосов
/ 21 мая 2019

Чтобы это сработало, вам лучше нацелиться на WC_Product метод get_tax_class() через выделенные связанные составные хуки, таким образом:

add_filter('woocommerce_product_get_tax_class', 'switch_product_tax_class', 100, 2 );
add_filter('woocommerce_product_variation_get_tax_class', 'switch_product_tax_class', 100, 2 );
function switch_product_tax_class( $tax_class, $product ){
    if( isset($_COOKIE["customerType"]) && $_COOKIE["customerType"] == 'business' ){
        return "Zero Rate";
    }
    return $tax_class;
}

Код помещается в файл functions.php вашей активной дочерней темы (или активной темы). Проверено и работает.


На основе свойства WC_Customer is_vat_exempt вы также можете попробовать использовать следующее:

add_action( 'template_redirect', 'vat_exempt_b2b_customers' );
function vat_exempt_b2b_customers() {
    if( isset($_COOKIE["customerType"]) && $_COOKIE["customerType"] === 'business' 
    && ! WC()->customer->is_vat_exempt() ){
        WC()->customer->set_is_vat_exempt( true );
    }
}

Код помещается в файл functions.php вашей активной дочерней темы (или активной темы).

...