WooCommerce如何禁用加入购物车提交后自动跳转至购物车页面
<div class="submit-group"> <button class="btn btn-green btn-large btn-full upper btn-book-ajax" type="submit" name="submit"> Book Now <i class="fa fa-spinner fa-spin hide"></i> </button> <input style="display:none;" type="submit" class="btn btn-default btn-send-message" data-id="9278" name="st_send_message" value="Send message"> </div>
上述代码中class属性为btn btn-green btn-large btn-full upper btn-book-ajax的按钮,功能与WooCommerce默认的「add to cart(加入购物车)」按钮完全一致,需要实现:禁用点击该类加入购物车按钮完成提交后,自动跳转至购物车页面的默认行为。
按优先级从高到低可选择以下方案:
后台可视化配置(无代码,优先选择)
进入WordPress后台,打开「WooCommerce → 设置 → 产品 → 通用」页面,找到「添加购物车后行为」配置项,将默认的「跳转到购物车页面」修改为「无(停留在当前页面)」,保存配置后即可全局生效,所有遵循WooCommerce原生加购逻辑的按钮都会取消自动跳转。原生过滤器修改(后台配置不生效时使用)
若主题或第三方插件重写了加购逻辑导致后台配置失效,可将以下代码添加到当前主题/子主题的functions.php文件中,通过WooCommerce官方钩子强制取消跳转:// 取消加购后自动跳转购物车 add_filter('woocommerce_add_to_cart_redirect', '__return_false');如果只需要针对当前这个带
btn-book-ajax类的按钮单独取消跳转,不影响其他加购按钮的行为,可以配合前后端逻辑做定向判断:- 加一段前端JS,给对应按钮提交的表单加自定义标记:
document.addEventListener('DOMContentLoaded', () => { const ajaxBookBtn = document.querySelector('.btn-book-ajax'); if (ajaxBookBtn) { ajaxBookBtn.addEventListener('click', function() { const markInput = document.createElement('input'); markInput.type = 'hidden'; markInput.name = 'stop_cart_jump'; markInput.value = '1'; this.closest('form').appendChild(markInput); }); } });- 调整后端过滤逻辑,仅识别到自定义标记时才取消跳转:
add_filter('woocommerce_add_to_cart_redirect', function($targetUrl) { if (isset($_POST['stop_cart_jump']) && $_POST['stop_cart_jump'] === '1') { return false; } return $targetUrl; });AJAX加购场景特殊处理
该按钮带有btn-book-ajax类名,默认走AJAX异步提交逻辑,WooCommerce原生AJAX加购本身不会触发页面跳转,如果出现自动跳转,基本是主题或插件自定义了added_to_cart事件的跳转逻辑。可以先在站点JS代码中搜索wc_add_to_cart_params.cart_url关键字,找到绑定跳转的逻辑段删除或加判断拦截;如果找不到对应代码,可直接加高优先级事件阻止跳转执行:// 优先级设为最高,拦截其他绑定在added_to_cart上的跳转逻辑 jQuery(document.body).on('added_to_cart', function(e) { e.stopImmediatePropagation(); // 可在此处自定义加购成功后的反馈,比如弹出成功提示 }, 999);
操作提示:修改主题文件前请提前备份,避免语法错误导致站点运行异常。
内容的提问来源于stack exchange,提问作者gulf optics web master

