Woocommerce одна функция вместо несколько?

сделал добавления товаров через ajax. Дело в том что добавлять продукт и менять количество стало проблемой, когда их много, и решили сделать следующим образом. Просто на js человек будет добавлять , а при клике на кнопку разом все отправится на сервер. Звучит круто, и достаточно быстрее НО! ajax запрос может отправлять лишь один раз, и второй выполниться когда придется response complete И за чего ajax функция выглядит следующим образом

var dataActions = [];
    for(var i = 0; i<$allProducts.length; i++){

      var item = $allProducts[i]
      var id = parseFloat($(item).attr('data-id'))
      var quantity = parseFloat($(item).find('.item-quantity').attr('value'))
      var data = {
        action: 'woocommerce_ajax_add_to_cart',
        product_id: id,
        product_sku: '',
        quantity: quantity,
      }
      dataActions.push(data)
    }

    postProducts(dataActions, 0);
    function postProducts(products, index){
      $.ajax({
        type: 'post',
        url: wc_add_to_cart_params.ajax_url,
        data: products[index],
        beforeSend: function (response) {

        },
        complete: function (response) {
          index++;
          if (products.length - 1 >= index) {
            postProducts(products, index);
          }
          else{
            if(window.location.hostname == "site.ru"){
              window.location.href = window.location.href + "?opencheck";
           }
          }
          
        },
      
      });
    }


add_action('wp_ajax_woocommerce_ajax_add_to_cart', 'woocommerce_ajax_add_to_cart');
add_action('wp_ajax_nopriv_woocommerce_ajax_add_to_cart', 'woocommerce_ajax_add_to_cart');
        
function woocommerce_ajax_add_to_cart() {

  $product_id = apply_filters('woocommerce_add_to_cart_product_id', absint($_POST['product_id']));
  $quantity = empty($_POST['quantity']) ? 1 : wc_stock_amount($_POST['quantity']);
  $variation_id = absint($_POST['variation_id']);
  $passed_validation = apply_filters('woocommerce_add_to_cart_validation', true, $product_id, $quantity);
  $product_status = get_post_status($product_id);

  if ($passed_validation && WC()->cart->add_to_cart($product_id, $quantity, $variation_id) && 'publish' === $product_status) {

      do_action('woocommerce_ajax_added_to_cart', $product_id);

      if ('yes' === get_option('woocommerce_cart_redirect_after_add')) {
          wc_add_to_cart_message(array($product_id => $quantity), true);
      }

      WC_AJAX :: get_refreshed_fragments();
  } else {

      $data = array(
          'error' => true,
          'product_url' => apply_filters('woocommerce_cart_redirect_after_error', get_permalink($product_id), $product_id));

      echo wp_send_json($data);
  }

  wp_die();
}

И код работает, действительно работает, но проблема в том что это цикличная функция добавления товаров , если их порядка 8 работает по 8-10 секунд. Скажите можно ли сделать что бы товары добавлялись одним запросом, а не по 8( в зависимости от количество товаров )


Ответы (0 шт):