/**
* 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');
}
});
});