我發現了一個函數,當物品的數量發生變化時它會自動更新購物車,並且它一直運行到WooCommerce的3.2.0更新(最新更新3.2.1)。我敢肯定,這東西代碼內改變:WooCommerce Ajax購物車更新停止工作
add_action('woocommerce_cart_updated', 'wac_update');
function wac_update() {
// is_wac_ajax: flag defined on wooajaxcart.js
if (!empty($_POST['is_wac_ajax'])) {
$resp = array();
$resp['update_label'] = __('Update Cart', 'woocommerce');
$resp['price'] = 0;
// render the cart totals (cart-totals.php)
ob_start();
do_action('woocommerce_after_cart_table');
do_action('woocommerce_cart_collaterals');
do_action('woocommerce_after_cart');
$resp['html'] = ob_get_clean();
// calculate the item price
if (!empty($_POST['cart_item_key'])) {
$items = WC()->cart->get_cart();
$cart_item_key = $_POST['cart_item_key'];
if (array_key_exists($cart_item_key, $items)) {
$cart_item = $items[$cart_item_key];
$_product = apply_filters('woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key);
$price = apply_filters('woocommerce_cart_item_subtotal', WC()->cart->get_product_subtotal($_product, $cart_item['quantity']), $cart_item, $cart_item_key);
$resp['price'] = $price;
}
}
echo json_encode($resp);
exit;
}
}
我的JavaScript仍在工作,但在這裏是一個參考:
function refreshCart() {
jQuery('.cart-builder .qty').on('change', function(){
var form = jQuery(this).closest('form');
// emulates button Update cart click
jQuery("<input type='hidden' name='update_cart' id='update_cart' value='1'>").appendTo(form);
// plugin flag
jQuery("<input type='hidden' name='is_wac_ajax' id='is_wac_ajax' value='1'>").appendTo(form);
var el_qty = jQuery(this);
var matches = jQuery(this).attr('name').match(/cart\[(\w+)\]/);
var cart_item_key = matches[1];
form.append(jQuery("<input type='hidden' name='cart_item_key' id='cart_item_key'>").val(cart_item_key));
// get the form data before disable button...
var formData = form.serialize();
jQuery("input[name='update_cart']").val('Updating...').prop('disabled', true);
jQuery.post(form.attr('action'), formData, function(resp) {
// ajax response
jQuery('.cart-collaterals').html(resp.html);
el_qty.closest('.cart_item').find('.product-subtotal').html(resp.price);
console.log(resp.test);
jQuery('#update_cart').remove();
jQuery('#is_wac_ajax').remove();
jQuery('#cart_item_key').remove();
jQuery("input[name='update_cart']").val(resp.update_label).prop('disabled', false);
},
'json'
);
});
}
我一直在尋找通過更改日誌,https://github.com/woocommerce/woocommerce/blob/master/CHANGELOG.txt,但我找不到現在會發生什麼衝突。就像我說的那樣,在更新之前它完美地工作。
您是否在控制檯中看到任何javascript錯誤? –
沒有錯誤,並且我將每個響應添加到控制檯日誌中,並且所有內容都有工作屬性。它只是似乎價格不更新 –
這是在購物車頁面是正確的嗎?我正在研究它... –