WooCommerce添加购物车跳转代码仅生效于单品页,如何适配商城页?
解决WooCommerce商城页Add to Cart跳转结账页的问题
原代码仅在单品页生效,是因为商城页/产品列表页的Add to Cart按钮默认使用AJAX提交请求,不会触发add_to_cart_redirect过滤器。要让商城页也实现跳转,需要同时处理非AJAX和AJAX两种添加场景:
// 处理非AJAX场景(单品页等直接跳转的Add to Cart) add_filter('add_to_cart_redirect', 'lw_add_to_cart_redirect'); function lw_add_to_cart_redirect() { return wc_get_checkout_url(); // 用WooCommerce官方推荐函数替代全局变量,更稳定 } // 处理AJAX场景(商城页、产品列表页的Add to Cart) add_action('wp_ajax_add_to_cart', 'lw_ajax_add_to_cart_redirect'); add_action('wp_ajax_nopriv_add_to_cart', 'lw_ajax_add_to_cart_redirect'); function lw_ajax_add_to_cart_redirect() { $product_id = apply_filters('woocommerce_add_to_cart_product_id', absint($_POST['product_id'])); // 验证产品有效性 if (wc_get_product($product_id)) { wp_send_json_success([ 'redirect' => wc_get_checkout_url() ]); } wp_send_json_error(); }
代码说明
- 第一部分保留了对非AJAX场景的处理,替换成
wc_get_checkout_url()是WooCommerce的标准用法,比调用全局$woocommerce对象更可靠。 - 第二部分通过
wp_ajax_add_to_cart和wp_ajax_nopriv_add_to_cart钩子,分别处理登录/未登录用户的AJAX添加请求,在验证产品有效后,返回结账页URL让前端自动跳转。
注:如果你的主题或其他插件自定义了AJAX Add to Cart的前端逻辑,可能需要微调前端代码适配,但上述代码完全兼容WooCommerce默认的AJAX处理机制。
内容的提问来源于stack exchange,提问作者Dave Didal
相关产品推荐
相关产品推荐

