加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – Woocommerce | WordPress – WC_Cart :: set_quantity –

发布时间:2020-12-13 22:26:01 所属栏目:PHP教程 来源:网络整理
导读:我正在开发一个电子商务网站. 我正在尝试使用ajax请求设置购物车项目数量. 我懂了 if (isset($_POST['product_id']) isset($_POST['new_quantity'])) { global $woocommerce; $woocommerce-cart-set_quantity($_POST['product_id'],$_POST['new_quantity']);
我正在开发一个电子商务网站.
我正在尝试使用ajax请求设置购物车项目数量.

我懂了

if (isset($_POST['product_id']) && isset($_POST['new_quantity'])) {
   global $woocommerce;
   $woocommerce->cart->set_quantity($_POST['product_id'],$_POST['new_quantity']);
}

我也尝试过

WC()->....

但它不起作用并抛出此错误

Call to a member function needs_shipping() on null in
C:xampphtdocsfindandcandywp-contentpluginswoocommerceincludesclass-wc-cart.php on line 1514

是什么导致这种情况发生?

如果您需要我显示更多代码,请告诉我.
谢谢

解决方法

好的,您现在可以更新购物车商品的数量而无需通过AJAX刷新(:

我的functions.php看起来像这样

//Enqueue Ajax Scripts
function enqueue_cart_qty_ajax() {

    wp_register_script( 'cart-qty-ajax-js',get_template_directory_uri() . '/js/cart-qty-ajax.js',array( 'jquery' ),'',true );
    wp_localize_script( 'cart-qty-ajax-js','cart_qty_ajax',array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
    wp_enqueue_script( 'cart-qty-ajax-js' );

}
add_action('wp_enqueue_scripts','enqueue_cart_qty_ajax');

function ajax_qty_cart() {

    // Set item key as the hash found in input.qty's name
    $cart_item_key = $_POST['hash'];

    // Get the array of values owned by the product we're updating
    $threeball_product_values = WC()->cart->get_cart_item( $cart_item_key );

    // Get the quantity of the item in the cart
    $threeball_product_quantity = apply_filters( 'woocommerce_stock_amount_cart_item',apply_filters( 'woocommerce_stock_amount',preg_replace( "/[^0-9.]/",filter_var($_POST['quantity'],FILTER_SANITIZE_NUMBER_INT)) ),$cart_item_key );

    // Update cart validation
    $passed_validation  = apply_filters( 'woocommerce_update_cart_validation',true,$cart_item_key,$threeball_product_values,$threeball_product_quantity );

    // Update the quantity of the item in the cart
    if ( $passed_validation ) {
        WC()->cart->set_quantity( $cart_item_key,$threeball_product_quantity,true );
    }

    // Refresh the page
    echo do_shortcode( '[woocommerce_cart]' );

    die();

}

add_action('wp_ajax_qty_cart','ajax_qty_cart');
add_action('wp_ajax_nopriv_qty_cart','ajax_qty_cart');

我的cart-qty-ajax.js看起来像这样.

jQuery( function( $) {

    $( document ).on( 'change','input.qty',function() {

        var item_hash = $( this ).attr( 'name' ).replace(/cart[([w]+)][qty]/g,"$1");
        var item_quantity = $( this ).val();
        var currentVal = parseFloat(item_quantity);

        function qty_cart() {

            $.ajax({
                type: 'POST',url: cart_qty_ajax.ajax_url,data: {
                    action: 'qty_cart',hash: item_hash,quantity: currentVal
                },success: function(data) {
                    $( '.view-cart-popup' ).html(data);
                }
            });  

        }

        qty_cart();

    });

});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读