WooCommerce如何根据商品数量重定向AJAX加入购物车按钮链接?
WooCommerce按购买人数重定向加购逻辑解决方案
原有代码不生效的原因
- 你使用的
woocommerce_add_to_cart是动作钩子,用add_filter挂载属于写法错误 - 当前加购走AJAX异步请求逻辑,服务端直接返回
wp_redirect的302状态码无法触发前端页面跳转 - 没有对POST参数做判空处理,参数不存在时会抛出PHP警告,也可能导致逻辑无法正常触发
可行解决方案
场景1:保留AJAX加购功能
需要同时修改服务端验证逻辑和添加前端跳转逻辑:
- 服务端代码(添加到主题functions.php文件)
add_filter('woocommerce_add_to_cart_validation', 'custom_check_person_quantity', 10, 3); function custom_check_person_quantity($passed, $product_id, $quantity) { $adult_number = isset($_POST['adult_number']) ? intval($_POST['adult_number']) : 0; $child_number = isset($_POST['child_number']) ? intval($_POST['child_number']) : 0; $infant_number = isset($_POST['infant_number']) ? intval($_POST['infant_number']) : 0; $total = $adult_number + $child_number + $infant_number; if ($total > 4) { wc_add_notice('总人数超过4人,将跳转至团体游页面', 'error'); $passed = false; // 给AJAX响应添加跳转标记 add_filter('woocommerce_add_to_cart_fragments', function($fragments) { $fragments['custom_redirect_url'] = home_url('/viaggi-gruppo/'); return $fragments; }); } return $passed; }
- 前端代码(添加到主题全局JS文件,或通过wp_footer钩子输出到页面)
jQuery(document).on('wc_add_to_cart_response', function(e, response) { // 响应存在自定义跳转地址时触发前端跳转 if (response.custom_redirect_url) { window.location.href = response.custom_redirect_url; } });
场景2:不需要AJAX加购功能
先进入WooCommerce后台 > 产品 > 通用设置,取消勾选「启用加入购物车AJAX」,之后使用如下简化代码即可:
add_action('woocommerce_add_to_cart_validation', 'custom_check_person_quantity', 10, 3); function custom_check_person_quantity($passed, $product_id, $quantity) { $adult_number = isset($_POST['adult_number']) ? intval($_POST['adult_number']) : 0; $child_number = isset($_POST['child_number']) ? intval($_POST['child_number']) : 0; $infant_number = isset($_POST['infant_number']) ? intval($_POST['infant_number']) : 0; $total = $adult_number + $child_number + $infant_number; if ($total > 4) { wp_redirect(home_url('/viaggi-gruppo/')); exit; } return $passed; }
注意事项
- 先确认
adult_number、child_number、infant_number三个参数会随加购请求提交,参数缺失会导致计数逻辑失效 - 代码修改前请备份站点文件,避免语法错误导致站点无法访问
内容的提问来源于stack exchange,提问作者enfix
相关产品推荐
相关产品推荐

