Как добавить товар в корзину сразу только с помощью ajax - PullRequest
0 голосов
/ 14 мая 2019

Я бы хотел сразу добавить товар в корзину.например у меня есть 3 продукта A, B and C.Теперь я хотел бы добавить эти продукты сразу в корзину как пакет продуктов.

Так что, как только он добавлен в корзину, он показывает только имя пакета, не хочет показывать продукты A, B, C и как только пользователь нажимает на этот пакетназвание конкретного продукта будет показано (A,B,C).

Я видел некоторые плагины, такие как комплектация продукта , но я не хочу использовать какой-либо плагин, который я хотел бы сделать динамически, без использования каких-либоПлагин.

Я использовал следующий скрипт, но он добавляет только один товар за раз, а не как пакет в корзину.

Jquery Script

$(document).on('click', '.ajax_add_to_cart', function (e) {
    var product_id =$(this).attr('data-product_id');
    var product_qty =$(this).attr('data-quantity');
     e.preventDefault();

        var $thisbutton = $(this),
            $form = $thisbutton.closest('form.cart'),
            id = $thisbutton.val(),
            product_qty = product_qty,
            product_id = product_id,
            variation_id = $form.find('input[name=variation_id]').val() || 0;

        var data = {
            action: 'woocommerce_ajax_add_to_cart',
            product_id: product_id,
            product_sku: '',
            quantity: product_qty,
            variation_id: variation_id,
        };

       $(document.body).trigger('adding_to_cart', [$thisbutton, data]);

        $.ajax({
            method: 'post',           
            url:custom_plugin_script.ajaxurl,
            data: data,
            beforeSend: function (response) {
                $('#loading_img').show();
                $thisbutton.removeClass('added').addClass('loading');
            },
            complete: function (response) {
                $thisbutton.addClass('added').removeClass('loading');
            },
            success: function (response) {                
                if( response.error != 'undefined' && response.error ){                  
                    return true;
                  } else {
                     setTimeout(function() {
                        jQuery('#successMessage').show('1000');
                    }, 3000); // <-- time in milliseconds
                  }
            },
        });

        return false;
    })(jQuery);

Ниже приведен сценарий PHP, который я поместил в основной файл своего пользовательского плагина.

public function woocommerce_ajax_add_to_cart()
    {  
          ob_start();

       $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);
          wc_add_to_cart_message( $product_id );                
         // 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);
      } 
    die();

    }

Кто-нибудь имеет какое-либо представление об этом, как может id сделать это проблематично?

1 Ответ

0 голосов
/ 14 мая 2019

Вы можете отправить объект json на сервер.

var request = new Object();
    request.action= 'woocommerce_ajax_add_to_cart';
    request.cart = new Array();

var product1 = new Object();
    product.id = 1;
    // and so on

var product2 = new Object();
    product.id = 2;
    // and so on

request.cart.push(product1);
request.cart.push(product2);

var data = request;

Вы также должны указать свой тип данных в своем запросе ajax

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...