Фильтр WooCommerce woocommerce_adjust_non_base_location_prices в корзине - PullRequest
1 голос
/ 30 марта 2020

Я пытаюсь показать цены в зависимости от страны покупателя (цена с учетом налога в стране). Это прекрасно работает. Клиент платит всегда € 119,00, где бы он ни жил. Только налог корректируется.

Это работает только со следующим кодом:

add_filter( 'woocommerce_adjust_non_base_location_prices', '__return_false' );

Теперь у меня есть следующая задача: Есть страны с нулевым налогом, потому что они платят налог в своей стране (например, в Норвегии). Если ставка налога составляет 0%, я хочу взимать цену без налога (стандартная ставка нашего магазина составляет 19%) - в случае Норвегии это просто € 100,00.

Поэтому я попробовал следующий код:

function disable_woo_vat_adjustment(){

    $total_tax = WC()->cart->get_subtotal_tax();

    if( isset( $total_tax ) && $total_tax > 0 ){
        add_filter( 'woocommerce_adjust_non_base_location_prices', '__return_false' );
    }

}

do_action( 'after_setup_theme', 'disable_woo_vat_adjustment' );

Этот код все еще работает для Норвегии, цена € 100,00, и это правильно. Но теперь цена для всех других стран неверна, потому что цена не всегда одинакова (€ 119,00), вместо этого она составляет € 100,00 + налог (для Австрии 20,00% => € 120,00 вместо € 119,00).

Я попытался добавить вторую проверку в предложении if:

function disable_woo_vat_adjustment(){

    $total_tax = WC()->cart->get_subtotal_tax();

    if( isset( $total_tax ) && !empty( $total_tax ) && $total_tax > 0 ){
        add_filter( 'woocommerce_adjust_non_base_location_prices', '__return_false' );
    }else{
        remove_filter( 'woocommerce_adjust_non_base_location_prices', '__return_false' );
    }

}

do_action( 'after_setup_theme', 'disable_woo_vat_adjustment' );

Я также пытался не удалять функцию, но установить фильтр на __return_true в состоянии else, но не сделал работать также для всех других стран (например, в Австрии).

Что мне не хватает?

Спасибо.

1 Ответ

0 голосов
/ 30 марта 2020

У меня есть НЕ ИСПЫТАНО Я хочу сказать, что вы можете просто использовать этот фильтр без after_setup_theme

Может быть, это поможет вам на вашем пути?

function filter_woocommerce_adjust_non_base_location_prices( $passed ) {
    // $passed: DEFAULT = true
    $total_tax = WC()->cart->get_subtotal_tax();

    if( isset( $total_tax ) && $total_tax > 0 ){
        $passed = false;
    }       

    return $passed; 
}
add_filter( 'woocommerce_adjust_non_base_location_prices', 'filter_woocommerce_adjust_non_base_location_prices', 10, 1 ); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...