Custom add to cart button to add multiple product into cart with quantity :woocommerce

后端 未结 3 1800
北荒
北荒 2021-02-06 11:22

I want to create custom add to cart button to add my 3 product into cart with 2 quantity for each..

For add three product into cart I have done using like this:

相关标签:
3条回答
  • 2021-02-06 12:00

    Please check this link , This is works for me :)

    WooCommerce: Allow adding multiple products to the cart via the add-to-cart query string

    functions.php

    function woocommerce_maybe_add_multiple_products_to_cart() {
        // Make sure WC is installed, and add-to-cart qauery arg exists, and contains at least one comma.
        if ( ! class_exists( 'WC_Form_Handler' ) || empty( $_REQUEST['add-to-cart'] ) || false === strpos( $_REQUEST['add-to-cart'], ',' ) ) {
            return;
        }
    
        // Remove WooCommerce's hook, as it's useless (doesn't handle multiple products).
        remove_action( 'wp_loaded', array( 'WC_Form_Handler', 'add_to_cart_action' ), 20 );
    
        $product_ids = explode( ',', $_REQUEST['add-to-cart'] );
        $count       = count( $product_ids );
        $number      = 0;
    
        foreach ( $product_ids as $product_id ) {
            if ( ++$number === $count ) {
                // Ok, final item, let's send it back to woocommerce's add_to_cart_action method for handling.
                $_REQUEST['add-to-cart'] = $product_id;
    
                return WC_Form_Handler::add_to_cart_action();
            }
    
            $product_id        = apply_filters( 'woocommerce_add_to_cart_product_id', absint( $product_id ) );
            $was_added_to_cart = false;
            $adding_to_cart    = wc_get_product( $product_id );
    
            if ( ! $adding_to_cart ) {
                continue;
            }
    
            $add_to_cart_handler = apply_filters( 'woocommerce_add_to_cart_handler', $adding_to_cart->product_type, $adding_to_cart );
    
            /*
             * Sorry.. if you want non-simple products, you're on your own.
             *
             * Related: WooCommerce has set the following methods as private:
             * WC_Form_Handler::add_to_cart_handler_variable(),
             * WC_Form_Handler::add_to_cart_handler_grouped(),
             * WC_Form_Handler::add_to_cart_handler_simple()
             *
             * Why you gotta be like that WooCommerce?
             */
            if ( 'simple' !== $add_to_cart_handler ) {
                continue;
            }
    
            // For now, quantity applies to all products.. This could be changed easily enough, but I didn't need this feature.
            $quantity          = empty( $_REQUEST['quantity'] ) ? 1 : wc_stock_amount( $_REQUEST['quantity'] );
            $passed_validation = apply_filters( 'woocommerce_add_to_cart_validation', true, $product_id, $quantity );
    
            if ( $passed_validation && false !== WC()->cart->add_to_cart( $product_id, $quantity ) ) {
                wc_add_to_cart_message( array( $product_id => $quantity ), true );
            }
        }
    }
    
    // Fire before the WC_Form_Handler::add_to_cart_action callback.
    add_action( 'wp_loaded', 'woocommerce_maybe_add_multiple_products_to_cart', 15 );
    

    and you can use for your link.

    $product_ids = implode( ',', array( 1, 2, 55 ) );
    $url = esc_url_raw( add_query_arg( 'add-to-cart', $product_ids, wc_get_checkout_url() ) );
    

    Thanks !

    0 讨论(0)
  • 2021-02-06 12:14

    Save products id in array and make ajax request

     jQuery("#addSelected").click(function() {  var arrayLength =
     arrayOfAddedProducts.length;   jQuery.ajax({
             type: "POST",
             url: ajaxurl,
             data: {action : 'add_item_from_cart','getIDtoAdd' : arrayOfAddedProducts},
             success: function (res) {
                wc_load_all_products();
             }
         }); });
    

    function.php

    function add_item_from_cart() {
       foreach ($_POST['getIDtoAdd'] as $productId) {
          WC()->cart->add_to_cart( intval($productId), 1, 0, array(), array() );
        // WC()->cart->add_to_cart( $product_id = 0, $quantity = 1, $variation_id = 0, $variation = array(), $cart_item_data = array() );
       }
    }
    
    add_action('wp_ajax_add_item_from_cart', 'add_item_from_cart');
    add_action('wp_ajax_nopriv_add_item_from_cart', 'add_item_from_cart');
    
    0 讨论(0)
  • 2021-02-06 12:16

    You need to pass quantity in query string like:

    ?post_type=product&add-to-cart=100&quantity=2
    

    I have modify you code

     <script>
        jQuery('#buy').click(function(e) {
         e.preventDefault(); 
        var myStringArray = [<?php echo $p_id; ?>];
        var arrayLength = myStringArray.length;
        for (var i = 0; i < arrayLength; i++) {
         addToCart(myStringArray[i],2);
        }
    
        return true;
    
        //window.location.href = "http://seoexpertiser.ca/glassful/cart/";
        });
    
        function addToCart(p_id,qu) {
         $.get('/glassful/?post_type=product&add-to-cart=' + p_id +'&quantity='+qu, function() {
         // success
        $(".show_success").show();
         });
    
        }
        </script>
    

    I think this will solve your problem.

    0 讨论(0)
提交回复
热议问题