Удалить все элементы корзины с кнопки на пользовательской странице с помощью AJAX - PullRequest
0 голосов
/ 01 ноября 2018

Я создаю плагин для формы массового заказа (для использования с WordPress / WooCommerce) - все функции добавления в корзину работают нормально. Я борюсь за создание кнопки «Отменить заказ», которая при нажатии очищает все строки элементов (этот бит работает), а также удаляет все элементы из корзины.

Я пытаюсь сделать это, используя комбинацию AJAX / js, php и стандартного HTML ..:

Моя кнопка ..:

<button class="btn btn-danger btn-lg" id="cancelorder">Cancel Order</button>

Функция "Моя корзина пуста" ..:

add_action( 'init', 'woocommerce_clear_cart_url' );

function woocommerce_clear_cart_url() {
    global $woocommerce;
    if ( isset( $_GET['empty-cart'] ) ) {
        $woocommerce->cart->empty_cart();
    }
}

и, наконец, мой вызов функции js / ajax ..:

$("#cancelorder").click(function(){        
    if(confirm('Are you sure you want to clear all rows?')){
        $(".addedrow").remove(); //removes line items - not related to issue
        $.ajax({
        type: "POST",
        url: '/wp-admin/admin-ajax.php?action=woocommerce_clear_cart_url',
        data: {action : 'woocommerce_clear_cart_url'},
        success: function (res) {
            if (res) {
                alert('Removed Successfully');
                }
            }
        });
    } else {
        //back out with no action
    }
});

Строки удаляются из формы, но элементы остаются в корзине.

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Обновление: я смог заставить это работать, изменив существующий код выше к следующему ..:

Функция "Корзина пуста" ..:

add_action('wp_ajax_wc_woocommerce_clear_cart_url', 'wc_woocommerce_clear_cart_url');
add_action('wp_ajax_nopriv_wc_woocommerce_clear_cart_url', 'wc_woocommerce_clear_cart_url'); 
//added wc_ prefix in case of function name conflict

function wc_woocommerce_clear_cart_url() {
global $woocommerce;
$returned = ['status'=>'error','msg'=>'Your order could not be emptied'];
$woocommerce->cart->empty_cart();
if ( $woocommerce->cart->get_cart_contents_count() == 0 ) {    
    $returned = ['status'=>'success','msg'=>'Your order has been reset!'];       
}
die(json_encode($returned));
}

и сторона js / ajax ..:

$("#cancelorder").on('click',function(){        
    if(confirm('Are you sure you want to clear all rows?')){
        $.ajax({
        type: 'POST',
        dataType: 'json',
        url: '/wp-admin/admin-ajax.php?action=wc_woocommerce_clear_cart_url',
        data: {action : 'wc_woocommerce_clear_cart_url'},
        success: function (data) {
                if (data.status != 'success') {
                    alert(data.msg);
                } else {
                    $('#itemrows').html('');
                    addrows();
                }
            }   
        });
    } else {
        //back out with no action
    }
});
0 голосов
/ 01 ноября 2018

Ну, похоже, вы отправляете запрос POST

type: "POST"

и пытается восстановить параметр GET на вашем контроллере

if ( isset( $_GET['empty-cart'] ) )

Кроме того, ключ, который вы ищете ('empty-cart'), кажется, даже не существует ... По крайней мере, в этой части кода, которую вы предоставили ...

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