Добрый день , сделал добавления товаров через 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";
}
}
},
});
}
А этот код на php
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( в зависимости от количество товаров )