Добавление вариаций в корзину 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 Подскажите, где я мог ошибиться, так как я адаптировал чужой код под себя. Спасибо!


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