如何修改WooCommerce代码实现一键加多商品后跳转结账页
解决批量添加多门课程到购物车后跳转结账页的问题
问题背景
我使用WordPress/WooCommerce搭建在线课程网站,搭配Tutor LMS 2.0,需要实现一个按钮一次性将多门课程商品加入购物车。现有的代码已经能完成批量加购,但点击按钮后会跳转到首页,希望修改代码让点击后直接跳转到结账页面(着陆页为https://my.betterlifedesign.com/ultimate-bundle/,按钮位于页面底部)。
修改后的代码
private $prevent_redirect = false; // 用于处理多商品时阻止WooCommerce默认跳转 function __construct() { if ( ! isset( $_REQUEST[ 'add-more-to-cart' ] ) ) return; // 无批量加购请求时不加载 $this->prevent_redirect = 'no'; // 强制阻止WC自动跳转,确保所有商品都能处理完成 add_action( 'wp_loaded', [ $this, 'add_more_to_cart' ], 21 ); // 在WC默认逻辑之后执行批量加购 add_action( 'pre_option_woocommerce_cart_redirect_after_add', [ $this, 'intercept_option' ], 9000 ); // 拦截WC跳转设置 } function intercept_option() { return $this->prevent_redirect; } function add_more_to_cart() { $product_ids = explode( ',', $_REQUEST['add-more-to-cart'] ); // 遍历所有商品ID,调用WC自带的加购逻辑 foreach ( $product_ids as $product_id ) { $_REQUEST['add-to-cart'] = $product_id; WC_Form_Handler::add_to_cart_action(); } // 所有商品加购完成后,直接重定向到结账页面 wp_safe_redirect( wc_get_checkout_url() ); exit; } new add_more_to_cart;
关键修改说明
- 移除了原代码中针对最后一个商品恢复默认跳转的逻辑,全程保持阻止WooCommerce的自动跳转,避免中途触发跳转
- 在所有商品批量加购完成后,使用WooCommerce官方函数
wc_get_checkout_url()获取正确的结账页面地址,通过wp_safe_redirect()执行安全重定向,并用exit终止后续代码执行,确保跳转生效
内容的提问来源于stack exchange,提问作者rickwall
相关产品推荐
相关产品推荐

