Добавить рассчитанную комиссию на основе общей суммы после скидки в WooCommerce

Я пытаюсь добавить комиссию в свою корзину woocommerce на основе промежуточного итога после применения скидок:

    add_action( 'woocommerce_cart_calculate_fees','woocommerce_custom_surcharge' );
function woocommerce_custom_surcharge() {
global $woocommerce;

if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;

$percentage = 0.01;
$surcharge =  $woocommerce->cart->subtotal - $woocommerce->cart->get_cart_discount_total();
$woocommerce->cart->add_fee( 'Surcharge', $surcharge, true, '' );

}

Я не верю, что звонки, как $woocommerce->cart->get_cart_discount_total() может быть использован в хуке действия, поэтому я продолжаю получать 0.00 за плату.

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

Что еще я могу использовать в действии, чтобы получить тот же номер и добавить процентную плату?

1

Решение

WC_Cart аргумент объекта включен в woocommerce_cart_calculate_fees действие крюк. Я также использую расчет суммы в процентах, так как я полагаю, вы просто забыли это в своем коде.

Поэтому вы должны попробовать это вместо:

add_action( 'woocommerce_cart_calculate_fees','wc_custom_surcharge', 10, 1 );
function wc_custom_surcharge( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;

// HERE set your percent rate
$percent = 1; // 1%

// Fee calculation
$fee = ( $cart->subtotal - $cart->get_cart_discount_total() ) * $percent / 100;

// Add the fee if it is bigger than O
if( $fee > 0 )
$cart->add_fee( __('Surcharge', 'woocommerce'), $fee, true );
}

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

Проверено и работает отлично.

Примечание: также global $woocommerce; с $woocommerce->cart был заменен WC()->cart с давних пор. WC() объект woocommerce уже включает себя global $woocommerce;


Конкретное обновление:

add_action( 'woocommerce_cart_calculate_fees','wc_custom_surcharge', 10, 1 );
function wc_custom_surcharge( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;

// HERE set your percent rate and your state
$percent = 6;
$state = array('MI');

$coupon_total = $cart->get_discount_total();

// FEE calculation
$fee = ( $cart->subtotal - $coupon_total ) * $percent / 100;

if ( $fee > 0 && WC()->customer->get_shipping_state() == $state )
$cart->add_fee( __('Tax', 'woocommerce'), $fee, false);
}

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

Проверено и работает.

1

Другие решения

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

для всех, кто заинтересован: я использую плагин ignitewoo для подарочных сертификатов и хотел создать комиссию на основе остатка после купонов. это код Лоика с некоторыми изменениями:

add_action( 'woocommerce_cart_calculate_fees','wc_custom_surcharge', 10, 1 );
function wc_custom_surcharge( $cart) {
global $woocommerce;
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;

$state      = array('MI');

// HERE set your percent rate
$percent = 6;
$coupTotal = 0;
foreach ( $woocommerce->cart->applied_coupons as $cc ) {
$coupon = new WC_Coupon( $cc );
$amount = ign_get_coupon_amount( $coupon );
$coupTotal += $amount;
}// Fee calculation
$fee = ($cart->subtotal - $coupTotal) * $percent/100;
if (( $fee > 0 ) AND  (in_array( WC()->customer->shipping_state, $state ) ))
$cart->add_fee( __('Tax', 'woocommerce'), $fee, false);
}
1

По вопросам рекламы [email protected]