woocommerce_cart_calculate_fees: обновление комиссии за изменение пользовательского ввода - PullRequest
0 голосов
/ 19 марта 2020

Пример выдачи изображения


На странице оформления заказа WooCommerce:

Я хотел бы ввести любое число в " Пользовательский ввод комиссии"
- тогда он будет рассчитан в" Таблица общих цен".
- После размещения заказа « Пользовательский сбор » будет автоматически синхронизироваться с базой данных 1018 *.


Рекомендация: использовать Простой JavaScript вместо jQuery высоко ценится.


Это мои коды:

html

<label>
    Custom Fee
    <input id="custom_fee" name="custom_fee" type="number" required>
</label>

Обычная JavaScript


var $custom_fee = document.getElementById("custom_fee");

$custom_fee.addEventListener("change", function(){

    var data = {
        action: 'custom_fee',
        security: wc_checkout_params.apply_state_nonce,
        custom_fee_cost: $custom_fee.value,
    };

    var request = new XMLHttpRequest();
    request.open('POST', wc_checkout_params.ajax_url, true);
    request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');

    request.onload = function() {
        if (this.status >= 200 && this.status < 400) {
            var resp = this.response;
            console.log(resp);
        } else {
            var resp = this.response;
            console.log(resp);
        }
    };

    request.send(data);

});

функция. php

add_action('wp_ajax_custom_fee', 'custom_fee_ajax', 10);
add_action('wp_ajax_nopriv_custom_fee', 'custom_fee_ajax', 10);

function custom_fee_ajax() {
    if( ! is_checkout() ) return;
    global $wpdb;
    if( isset($_POST['custom_fee']) ){
        $custom_fee = $_POST['custom_fee'];
        WC()->session->set( 'custom_fee', $custom_fee );
        echo json_encode( WC()->session->get('custom_fee' ) );
    }
    die();
}

//________________________________________________________

add_action('woocommerce_cart_calculate_fees', 'custom_fee');

function custom_fee() {
    if( ! is_checkout() ) return;
    session_start();
    global $woocommerce;
    if ( !defined( 'DOING_AJAX' ) ) return;
    $fee = $_SESSION['custom_fee'];
    $woocommerce->cart->add_fee( 'Custom Fee' , $fee, true, '' );
}

ПРИМЕЧАНИЕ: Приведенный выше код работает неправильно (неверный запрос 400; php функции); поэтому я хотел бы, чтобы кто-то помог мне решить эту проблему.

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