Я нашел фрагмент в Github, который предположительно работает, но, как вы можете видеть в комментариях, в нем отсутствует логика кэширования.
Я пытаюсь обновить мини-корзину при каждом изменении количества с помощью ajax.
Прямо сейчас я потерялся, не могу найти ничего, что работает, и обновить количество моей мини-корзины Woocommerce.
Вот functions.php
//Add mini cart quantity field
add_filter( 'woocommerce_widget_cart_item_quantity', 'add_minicart_quantity_fields', 10, 3 );
function add_minicart_quantity_fields( $html, $cart_item, $cart_item_key ) {
$product_price = apply_filters( 'woocommerce_cart_item_price', WC()->cart->get_product_price( $cart_item['data'] ), $cart_item, $cart_item_key );
return woocommerce_quantity_input( array('input_value' => $cart_item['quantity']), $cart_item['data'], false ) . $product_price;
}
//Update mini cart
function ajax_update_mini_cart() {
echo wc_get_template( 'cart/mini-cart.php' );
die();
}
add_filter( 'wp_ajax_nopriv_ajax_update_mini_cart', 'ajax_update_mini_cart' );
add_filter( 'wp_ajax_ajax_update_mini_cart', 'ajax_update_mini_cart' );
и мой ajax-скрипт
// Update Mini Cart
$(document).ready(function () {
jQuery('#cart').on('change', 'input', function () {
$.post(
woocommerce_params.ajax_url,
{ action: 'mode_theme_update_mini_cart' },
function (response) {
$('#mode-mini-cart').html(response);
}
);
});
});
Я получаю следующую ошибку консоли от javascript:
POST http://localhost/wordpress/wp-admin/admin-ajax.php 400 (плохой Запрос)
Но я не понимаю почему, я дважды проверил скрипт и функцию, все должно работать нормально.
Как я могу обновить мини-тележку Woocommerce на основе ajax и предотвратить переопределение обновления кешем?
Все остальные возможности в сторону. По крайней мере, ваш action
назван неправильно в действии ajax.
// Update Mini Cart
$(document).ready(function () {
jQuery('#cart').on('change', 'input', function () {
$.post(
woocommerce_params.ajax_url,
{ action: 'ajax_update_mini_cart' }, // This must match the name of your wp_ajax filter
function (response) {
$('#mode-mini-cart').html(response);
}
);
});
});
Вышеизложенное основано на этих строках:
add_filter( 'wp_ajax_nopriv_ajax_update_mini_cart', 'ajax_update_mini_cart' );
add_filter( 'wp_ajax_ajax_update_mini_cart', 'ajax_update_mini_cart' );
где wp_ajax_{your_action_name}
и wp_ajax_nopriv_{your_action_name}
должны соответствовать действию ajax.
Может ли быть проблема с вашей функцией? Да... но, скорее всего, именно поэтому вы получаете ошибку 400.
Вы правы насчет ajax (странно, хотя кто-то опубликует этот код и назовет действие неправильно), но теперь у меня сама функция не работает.
Наверное, это должны быть два разных вопроса? Один - проблема с вашей функцией. 2 - проблема с неработающим ajax?
Возможно, вы правы, я задам еще один вопрос
Здесь есть что-нибудь полезное? stackoverflow.com/questions/16017081/…