#wordpress #woocommerce #rate #tax
Вопрос:
У меня есть эта функция, чтобы проверить, есть ли у вошедшего в систему пользователя ACF
gratis verzending
отметка, поэтому на основе этого я установил тариф доставки 0
.
add_filter('woocommerce_package_rates','free_shipping_for_customer',100,2);
function free_shipping_for_customer($rates, $package) {
$current_user = wp_get_current_user();
$current_user_id = $current_user->ID;
$free_shipping = get_field('gratis_verzending', 'user_'.$current_user_id.'');
if ($free_shipping) {
foreach ($rates as $rate) {
//Set the price
$rate->cost = 0;
}
}
return $rates;
}
Моя проблема в том, что shipping tax
это все еще ценность. Если у пользователя есть free shipping
налоги, то вся доставка должна быть 0
. Как я могу установить все налоги на доставку 0
?
НАШЕЛ РЕШЕНИЕ:
add_filter('woocommerce_package_rates', 'shipping_cost_based_on_weight', 12, 2);
function shipping_cost_based_on_weight( $rates, $package ){
if ( is_admin() amp;amp; ! defined( 'DOING_AJAX' ) )
return $rates;
$current_user = wp_get_current_user();
$current_user_id = $current_user->ID;
$free_shipping = get_field('gratis_verzending', 'user_'.$current_user_id.'');
if ($free_shipping) {
// Loop through the shipping taxes array
foreach ( $rates as $rate_key => $rate ){
$has_taxes = false;
// Set the new cost
$rates[$rate_key]->cost = 0;
// Taxes rate cost (if enabled)
$taxes = [];
// Loop through the shipping taxes array (as they can be many)
foreach ($rates[$rate_key]->taxes as $key => $tax){
if( $rates[$rate_key]->taxes[$key] > 0 ){
// Set the new tax cost
$taxes[$key] = 0;
$has_taxes = true; // Enabling tax
}
}
if( $has_taxes )
$rates[$rate_key]->taxes = $taxes;
}
}
return $rates;
}