2015-09-09 3 views
4

Я хочу, чтобы создать пользовательский добавить в корзину кнопку, чтобы добавить свой 3 продукт в корзину с 2 количество для каждого ..заказ добавить в корзину кнопку, чтобы добавить несколько товар в корзину с количеством: WooCommerce

Для добавления три продукта в корзина я сделал с помощью так:

<a id="buy" class="single_add_to_cart_button shop-skin-btn shop-flat-btn alt" href="#">ADD MY PRODUCT</a> 

$ P_ID = мой идентификатор продукта, например: 45,99,152

<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]); 
    } 

    return true; 
     }); 

    function addToCart(p_id) { 
    $.get('/glassful/?post_type=product&add-to-cart=' + p_id, function() { 
    $(".show_success").show(); 
    }); 

    } 
    </script> 

это добавит мой в результате продукт в корзину, но только с 1 количество Пожалуйста, дайте мне знать, как я могу добавить количество? Я хочу добавить 2 количества каждого продукта.

Среднее значение, когда нажимают на кнопку «Добавить в корзину», три продукта будут добавлены в корзину по 2 штуки.

Спасибо за помощь заранее ..

ответ

3

Вам необходимо пройти количество в строке запроса, как:

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

У меня изменить ваш код

<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> 

Я думаю, что это будет решать ваши проблема.

+0

Не работает для меня, он всегда пропускает один или несколько продуктов. Это похоже на то, что запросы слишком быстры. Что бы это могло быть? – flowDsign

+0

@flowDsign, если он пропускает некоторые продукты, тогда вам нужно добавить некоторое время задержки для каждого запроса. Если вы добавите задержку 1 сек или 2 секунды внутри цикла для addToCart (myStringArray [i], 2); то он будет работать –

+0

он не работает с задержкой. Я удалил цикл 'for' и сделал счет с переменной, используя функцию успеха ajax, чтобы иметь больше контроля после каждого запроса, а также когда он достигает максимального числа. – flowDsign

-1

Пожалуйста, проверьте эту ссылку, это работает для меня :)

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

и вы можете использовать для Вашей ссылки.

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

Спасибо!

+1

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ review/low-quality-posts/13584405) –

+0

@JFMeier Спасибо, я добавлю скрипт здесь :) –

Смежные вопросы