woocommerce_cart_calculate_fees загружается после woocommerce_before_cart_table

У меня есть проблема, пытаясь сделать некоторые расчеты с woocommerce_before_cart_table пользовательские значения и передача их woocommerce_cart_calculate_fees, Проблема в том, что woocommerce_before_cart_table загружается первым, и я не могу передать эти значения из woocommerce_before_cart_table в woocommerce_cart_calculate_fees крюк …

add_action( 'woocommerce_before_cart_table', 'my_custom_cart_items_raw_output');
function my_custom_cart_items_raw_output() {
//$sum = array();
foreach(WC()->cart->get_cart() as $cart_item_key => $item_values){

global $wpdb;

$mylink = $wpdb->get_row( "SELECT * FROM tax_hotel_and_name WHERE hotel_id= '".$item_values['st_booking_data']['room_id']."'" );
$x = $mylink->tax_percentage;
// Outputting the raw Cart items data to retrieve Bookings related data
$y = $item_values['st_booking_data']['total_price'];

$sum[]=    ($x / 100) * $y;
($x / 100) * $y.'<br>';
//  echo '<pre>'; print_r($item_values); echo '</pre>';
}
array_sum($sum);
}

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

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

// $percentage = 0;
// $taxes = array_sum($woocommerce->cart->taxes);
// $surcharge = ( $woocommerce->cart->cart_contents_total + $woocommerce->cart->shipping_total + $taxes ) * $percentage;
// // Make sure that you return false here.  We can't double tax people!
$woocommerce->cart->add_fee( 'Processing Fee', 12, false, '' );
}

Как я могу передать этот расчет на woocommerce_cart_calculate_fees крючок?

Спасибо

1

Решение

Так что, если я понимаю, что вы проводите некоторую проверку расчетов, связанных с данными бронирования, ваша первая функция подключена woocommerce_before_cart_table. Я сделал небольшое изменение в вашем коде для global $wpdb;:

add_action( 'woocommerce_before_cart_table', 'my_custom_cart_items_raw_output');
function my_custom_cart_items_raw_output() {

global $wpdb; // To be declared only once at the begining before the foreach loop

foreach(WC()->cart->get_cart() as $cart_item_key => $item_values){

$mylink = $wpdb->get_row( "SELECT * FROM tax_hotel_and_name WHERE hotel_id= '".$item_values['st_booking_data']['room_id']."'" );
$x = $mylink->tax_percentage;
// Outputting the raw Cart items data to retrieve Bookings related data
$y = $item_values['st_booking_data']['total_price'];

$sum[] = ($x / 100) * $y;
// echo    ($x / 100) * $y.'<br>';
// echo '<pre>'; print_r($item_values); echo '</pre>';
}
array_sum($sum);
// test output of $sum
echo $sum;
}

Если вы уверены в своих вычислениях, так как данные корзины являются своего рода живыми, вы можете использовать свой код вычисления непосредственно в своей второй подключенной функции в хуке действий woocommerce_cart_calculate_fees, с небольшими изменениями, поскольку этот хук имеет собственный $cart_object аргумент.

Итак, ваш код должен быть примерно таким:

add_action( 'woocommerce_cart_calculate_fees','woocommerce_custom_surcharge', 10, 1 );
function woocommerce_custom_surcharge( $cart_object ) {

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

## ---- CALCULATION ---- ##

global $wpdb;

foreach( $cart_object->get_cart() as $values ){

$tax_hotel = $wpdb->get_row( "SELECT * FROM tax_hotel_and_name WHERE hotel_id= '".$values['st_booking_data']['room_id']."'" );

$sum[] = ($tax_hotel->tax_percentage / 100) * $values['st_booking_data']['total_price'];
}

$fee = array_sum($sum);

## ---- APPLYING CALCULATED FEE ---- ##

if($fee > 0)
$cart_object->add_fee( __('Processing Fee'), $fee, false );
}

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

Этот код не проверен, но он должен работать…

2

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

Других решений пока нет …

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