商品の数量が変更されたときに自動的にカートを更新する機能が見つかりました.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がまだ作業が、ここで、それは参考のためにある:私はこのコード内で変更何かかなり確信している私は、変更ログ、https://github.com/woocommerce/woocommerce/blob/master/CHANGELOG.txtを通して見てきた
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'
);
});
}
が、私は今、矛盾しているものを見つけることができません。私が言ったように、それはこの更新される前に完全に働いていた。
コンソールにJavaScriptエラーが表示されていませんか? –
エラーはありません。それぞれの応答をコンソールログに追加し、すべてのプロパティに作業プロパティが追加されました。それはちょうど価格が更新されていないようだ –
これはカートのページには正しいですか?私は今それを探しています... –