1

图像问题示例


在 WooCommerce“结帐”页面:

我想在“自定义费用输入” 中输入任何数字
- 然后它将在“总价表”中计算。
- 下订单后,“自定义费用”将自动同步到数据库中。


建议:非常感谢使用纯 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 函数);所以我想有人帮我解决这个问题。

4

0 回答 0