@rusmag14

Как сделать кнопку удаления выбранных товаров из корзины Woocommerce?

5fc240ceaaf3b511187397.png
5fc240d6175bd910178926.png

Добрый день подскажите как реализовать функцию удаления выбранных товаров в корзине.

Я сделал чекбоксы для товаров в корзине, сделал их выбор и пытаюсь сделать при клике на кнопку "Удалить выбранные" если у товара активен чекбокс то пытаюсь вызвать клик по кнопке "delete" у товаров.

Вот мой код, почему то он не работает.

$('#cart-checkbox').click(function(){
	if ($(this).is(':checked')){
		$('.cart-product-check-block input:checkbox').prop('checked', true);
	} else {
		$('.cart-product-check-block input:checkbox').prop('checked', false);
	}
});

$('body').on('click', '.cart-delete-message', function() {
	if($(".cart-product-check").is(":checked")) {  
		$('.remove').on('click');
	}
});
  • Вопрос задан
  • 742 просмотра
Пригласить эксперта
Ответы на вопрос 1
Hу первое, для того, что бы вызвать событие . надо использовать функцию trigger
Второе т.к. удаление происходит по ajax и Вы будете вызывать в цикле для каждого выбранного товара, то у Вас будет серия ajax запросов.

Правильнее будет сделать так
Собрать все id выбранных товаров и отправить один запрос на сервер и обновить страницу
Как пример удаление всех товаров из корзины

/**
	 * AJAX полная очитска корзины
	 * Функция WC_AJAX::get_refreshed_fragments() сама возвращает код возврата
	 * todo: Сделать возврат данных для кнопки в корзине.
	 * todo: Сейчас кнопка в корзине принудительно перезагружает страницу
	 */
	function ajax_clear_cart() {

		WC()->cart->empty_cart( $clear_persistent_cart = true );
		WC_AJAX::get_refreshed_fragments();
	}

	add_action( 'wp_ajax_qop_clear_cart', 'ajax_clear_cart' );
	add_action( 'wp_ajax_nopriv_qop_clear_cart', 'ajax_clear_cart' );

/**
     * Запуск очистки корзины
     * todo: Для страницы корзины сделать обновление без перезагрузки
     */
    $(document.body).on('click', '.qop-clear-cart', function (e) {
        var $thisbutton = $(e.target),
            location = '',
            confirmed = confirm("Внимание!!! Все товары из корзины будут удалены. Продолжить?");

        if (!confirmed) {
            return;
        }

        // т.к. кнопка очитски есть и в миникорзине, то нужно знать кто вызвал событие.
        if ($thisbutton.closest('div.widget_shopping_cart_content').length) {
            location = 'widget_mini_cart';
        } else if ($thisbutton.closest('form.woocommerce-cart-form').length) {
            location = 'page_cart';
        }

        let productsData = {
            action: 'qop_clear_cart',
            location: location
        };

        $.ajax({
            url: qopParams.ajax_url,
            type: 'POST',
            data: productsData,
            success: function (response) {
                console.log(response);
                if (!response || !response.fragments) {
                    return;
                }

                if ('widget_mini_cart' === location) {
                    // Trigger event so themes can refresh other areas.
                    $(document.body).trigger('removed_from_cart', [response.fragments, response.cart_hash, $thisbutton]);
                } else if ('page_cart' === location) {
                    window.location.reload();
                }
            },
            beforeSend: function () {
                $($thisbutton).addClass('loading');
            },
            complete: function () {
                $($thisbutton).removeClass('loading');
            }
        });
    });
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы