Добавление вариаций в корзину woocommerce
Для каждой вариации есть свой инпут количества Фото прикрепил, покажу что из себя представляет код:
<input type="text" name="quantity" value="0" data-variation-id="<?php echo $variation['variation_id']; ?>" data-product-id="<?php echo absint($product->get_id()); ?>" readonly>
В дата атрибуты подтягиваются product_id и variation_id
Стоит задача сформировать добавление в корзину через AJAX
Сам скрипт
$(document).ready(function ($) {
$("body").on("click", ".add-to-cart-variation", function (e) {
e.preventDefault();
var variations = [];
$('.d-sizes__control input[name="quantity"]').each(function () {
var variation_id = $(this).data("variation-id");
var product_id = $(this).data("product-id");
var quantity = $(this).val();
variations.push({
variation_id: variation_id,
product_id: product_id,
quantity: quantity,
action: "add_variation_to_cart",
});
});
// Формируем данные для отправки через POST
var data = {
variations: variations,
};
// Отправляем POST-запрос
$.ajax({
type: "POST",
url: wc_add_to_cart_params.ajax_url,
data: data,
success: function (response) {
if (response) {
$(document.body).trigger("added_to_cart", [
response.fragments,
response.cart_hash,
$(this),
]);
}
},
dataType: "json",
});
return false;
});
});
Обработка скрипта
add_action('wp_ajax_add_variation_to_cart', 'add_variation_to_cart');
add_action('wp_ajax_nopriv_add_variation_to_cart', 'add_variation_to_cart');
function add_variations_to_cart()
{
// Проверяем, что запрос пришел с использованием AJAX и что данные получены
if (isset($_POST['variations']) && is_array($_POST['variations'])) {
foreach ($_POST['variations'] as $variation) {
$product_id = intval($variation['product_id']);
$variation_id = intval($variation['variation_id']);
$quantity = intval($variation['quantity']);
$variation_data = array(
'variation_id' => $variation_id,
'quantity' => $quantity
);
// Добавляем вариацию в корзину
WC()->cart->add_to_cart($product_id, $quantity, $variation_id, $variation_data);
}
// Обновляем фрагменты корзины
WC_AJAX::get_refreshed_fragments();
}
// Завершаем выполнение скрипта
wp_die();
}
Я не особо понимаю в AJAX Подскажите, где я мог ошибиться, так как я адаптировал чужой код под себя. Спасибо!