Я работаю над плагином WordPress, который изменяет количество элементов оформления заказа WooCommerce на основе количества дней для аренды из двух полей ввода даты, которые были добавлены к оформлению заказа. Все рассчитывается и отображается правильно на странице оформления заказа, но когда я нажимаю «Оформить заказ» или продолжаю оплату, выставляется счет только за 1x, а не за количество дней, которое отображается при оформлении заказа. Это неправильное количество также сохраняется в заказе, а база данных неверна.
PHP функции в плагине следующие
<?php
function get_days(){
$days = 0;
if (isset($_POST['post_data'])) {
parse_str($_POST['post_data'], $arr);
$days = intval($arr['rental_days']);
}
if ($days < 1) {
return 1;
}
return $days;
}
add_action( 'woocommerce_before_calculate_totals', 'modify_cart_quantity_by_days' );
function modify_cart_quantity_by_days($cart){
// Get reservation length in days
$days = get_days();
// Calculate free days for longer rentals
$discount = floor($days/7);
// Calculate billabe days
$modDays = $days - $discount;
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
foreach( $cart->get_cart() as $cart_item_key => $cart_item ) {
// Get Product ID
$product_id = $cart_item['data']->get_id();
// Set quantity of each product
$cart->set_quantity( $cart_item_key, $modDays );
}
}
?>
Страница обновлены с ajax и jQuery при изменении полей ввода даты аренды
function update_cart(){
var start_date = new Date($("#rental_start_date").val());
var end_date = new Date($("#rental_end_date").val());
var rental_days = Math.ceil((end_date - start_date)/(1000*60*60*24));
$('input#rental_days').attr('value', rental_days);
console.log($('input#rental_days').val());
$(document.body).trigger('update_checkout');
console.log("Updating Cart for rental of " + rental_days + " days.");
}
Все примеры, с которыми я сталкивался, не показывают никаких дополнительных функций или чего-либо, что требуется для получения измененных количеств продолжать выставлять счета и хранить в базе данных. Что мне не хватает? Что мне нужно сделать, чтобы модифицированное количество работало так, как ожидается.