如何修改WooCommerce改量插件实现无AJAX更新购物车商品数量
实现方案
方案1:自定义URL参数实现(和你已知的add-to-cart参数逻辑一致)
WooCommerce原生没有公开的全局修改购物车数量的URL参数,你可以通过少量自定义代码快速实现:
- 将以下代码添加到你站点主题的
functions.php文件,或者自定义功能插件中:
// 拦截URL参数更新结账页购物车商品数量 add_action('template_redirect', 'custom_update_cart_qty_via_url'); function custom_update_cart_qty_via_url() { // 仅在结账页触发逻辑 if (!is_checkout() || empty($_GET['update_cart_item']) || empty($_GET['new_quantity'])) { return; } $cart_item_key = sanitize_text_field($_GET['update_cart_item']); $new_qty = intval($_GET['new_quantity']); // 校验数量合法性 if ($new_qty < 1) { wc_add_notice('商品数量不能小于1', 'error'); wp_safe_redirect(wc_get_checkout_url()); exit; } // 执行购物车数量更新 WC()->cart->set_quantity($cart_item_key, $new_qty); wc_add_notice('商品数量已更新', 'success'); // 跳转回无参数的结账页,避免刷新重复提交 wp_safe_redirect(remove_query_arg(['update_cart_item', 'new_quantity'])); exit; }
- 改造你正在使用的「Change Quantity on Checkout for WooCommerce」插件的加减按钮逻辑:移除原有AJAX绑定事件,将按钮的点击行为改为跳转至拼接好参数的结账页地址即可,格式参考:
https://example.com/checkout?update_cart_item=对应商品的cart_item_key&new_quantity=修改后的数量
每个商品的cart_item_key可以直接从结账页的商品循环变量中获取,不需要额外查询。
方案2:更简便的表单提交方案(无需自定义URL参数)
你可以直接将结账页的数量选择器包裹在一个提交地址为结账页的表单内,监听数量变化自动提交表单,后台直接接收数量参数更新购物车即可,逻辑更简单,也完全符合你无AJAX的要求,和你已关闭结账页AJAX的设置没有冲突。
两种方案更新完成后,页面刷新时购物车金额、运费、优惠等相关数据都会自动同步,不需要额外适配。
内容的提问来源于stack exchange,提问作者IgnitedIce
相关产品推荐
相关产品推荐

