Hoàng Web

Thiết Kế Website WordPress

  • Kho giao diện
  • Dịch Vụ
    • Thiết kế web giá rẻ
    • Thiết kế website WordPress
    • Hosting Miễn Phí 100GB
    • Tích hợp thanh toán MoMo, ViettelPay, Vietcombank, MB..
    • Tối ưu Google PageSpeed
    • Sửa lỗi nâng cấp website
    • Viết plugin WordPress
    • Code Tool theo yêu cầu
  • Bảng giá
  • Quy trình làm việc
  • Giới thiệu
  • Liên Lạc
Trang chủ » Wordpress » [WooCommerce] Cập nhật giỏ hàng động khi thay đổi số lượng sản phẩm

[WooCommerce] Cập nhật giỏ hàng động khi thay đổi số lượng sản phẩm

Thứ Năm, 15/11/2018 by Hoàng Quách

  • shares
  • Facebook
  • Facebook Messenger
  • Gmail
  • Viber
  • Skype

Mặc định WooCommerce không cập nhật giỏ hàng khi bạn thay đổi số lượng sản phẩm trên giỏ hàng WooCommerce. Sử dụng nút cộng/trừ số lượng cho mỗi sản phẩm bạn có thêm vào giỏ hàng và để cập nhật mới giỏ hàng bạn cần nhấn nút cập nhật bên cạnh giỏ hàng. Tuy nhiên, nhiều bạn muốn cập nhật giỏ hàng động ngay sau khi khách hàng thêm hoặc bớt số lượng sản phẩm trên trang giỏ hàng. Trong bài viết này mình sẽ hướng dẫn các bạn làm sao để cập nhật giỏ hàng mà không cần nhấn nút cập nhật.

Bạn thêm dòng sau vào tệp functions.php của bạn.

//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');

Tiếp đến, bạn tạo file cart-qty-ajax.js và chép vào nội dung dưới đây.

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();

    });

});

Ok, lúc này mỗi khi bạn thêm sản phẩm vào giỏ hàng và thay đổi số lượng mua sản phẩm trên giỏ hàng , các sản phẩm trên giỏ hàng sẽ tự động được cập nhật bằng công nghệ Ajax.

Bạn cũng muốn ẩn/xóa nút cập nhật đúng không? để xóa button này bạn có thể tìm & mở template yourtemplate/woocommerce/cart/cart.php

..
<button type="submit" class="button" name="update_cart" value="<?php esc_attr_e( 'Update cart', 'woocommerce' ); ?>"><?php esc_html_e( 'Update cart', 'woocommerce' ); ?></button>
..

Có nhiều cách để bạn có thể xóa nút cập nhật giỏ hàng, cách đơn giản nhất mình sẽ xóa trực tiếp mã HTML trên hoặc nếu muốn sử dụng lại về sau, bạn thêm mã css để ẩn nút.

.button[name=update_cart]{
	display:none;
}

Chúc bạn thành công.

Để nhận được bài viết mới vui lòng đăng ký kênh kiến thức WordPress từ A-Z ở Form bên dưới. Bạn cũng có thể nhận được sự trợ giúp trên Twitter và Facebook

  • shares
  • Facebook
  • Facebook Messenger
  • Gmail
  • Viber
  • Skype

Chuyên mục: Wordpress Tìm kiếm: Woocommerce

Comments

  1. Khánh says

    Thứ Sáu, 22/03/2019 at 7:26 sáng

    em đang tập làm web ,cho em hỏi tạo file cart-qty-ajax.js ở thư mục nào ạ. em xin cảm ơn

  2. Huynguyen says

    Thứ Ba, 23/04/2019 at 9:13 sáng

    Cho em hỏi tạo file cart-qty-ajax.js là làm thế nào vậy ạ admin. thanks

  3. Hoàng Quách says

    Thứ Ba, 23/04/2019 at 2:30 chiều

    bạn tạo file js này trong thư mục theme của WP: hàm get_template_directory_uri() trả về dường dẫn thư mục giao diện hiện tại nằm trong thư mục themes

  4. Hoàng Anh says

    Thứ Sáu, 02/08/2019 at 7:54 sáng

    ‘.view-cart-popup’ cái này là class của tổng tiền phải ko ạ, nhưng đây chỉ xủ lí đơn khi chỉ có một sản phẩm phải ko ạ, nếu có nhiều sản phẩm , thì khi thay đổi số lượng một sản phẩm thì làm sao để xủ lí dữ liệu tổng tiền của một sản phẩm ạ,
    Phần html thì xử lí lấy dữ liệu từ database load vòng lặp để load dữ liệu, vd thì khi load thì những số lượng hay tổng tiền thì được chung 1 class, nếu làm như trên thì khi thay đổi 1 số lượng của của 1 sản phẩm thì tất cả tổng tiền của tất cả sản phâm đều theo tiền của sản phẩm được thay đổi, thể làm thế nào để thay đổi tổng tiền của sản phẩm được thay đổi số lượng ạ
    E cảm ơn

    • Hoàng Quách says

      Thứ Sáu, 02/08/2019 at 9:47 sáng

      không có cơ chế ngược bạn nhé, phải thay đổi số lượng -> để thay đổi tổng tiển của giỏ hàng

  5. hùng says

    Thứ Sáu, 16/08/2019 at 4:53 chiều

    ‘.view-cart-popup’ cho hỏi cái này là class của cái gì vậy

    • Hoàng Quách says

      Thứ Sáu, 16/08/2019 at 9:46 chiều

      bạn tạo thêm widget giỏ hàng dạng popup khi dê chuột, thường đặt ở vị tri góc phải trong header của trang & thêm class này vào nội dung widget đó để update content mỗi khi nhấn nút add to cart. lưu ý: kích hoạt js sử lý add to cart trong cài đặt woocommerce

Tôi giúp gì cho bạn?

HOÀNG WEB

Địa chỉ: Tây Sơn, Phường Quang Trung, Quận Đống Đa, Hà Nội

Hotline: 0987 342 124 – 0868 292 303 (8h:00 – 21h:00)

Email: [email protected]

Website: www.hoangweb.com

KẾT NỐI VỚI TÔI

  • Facebook
  • GitHub
  • YouTube

SẢN PHẨM

  • Plugin Thanh Toán Quét Mã QR Code Tự Động
  • WP2Speed – Tối ưu Google Speed
  • 23WebHost – Hosting Miễn Phí 100GB

LIÊN KẾT

  • Có nên thuê thiết kế website giá rẻ?
  • Hướng dẫn thanh toán
  • Chính sách hoàn tiền
  • Trung tâm hỗ trợ

Copyright © 2023 | All rights reserved | HOANG WEB
Mọi hình thức sao chép nội dung trên website này mà chưa được sự đồng ý đều là trái phép.