Измененное количество заказа WooCommerce не выставляет счет за измененное количество, только по умолчанию 1x - PullRequest
0 голосов
/ 10 марта 2020

Я работаю над плагином 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.");

    }

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...