Woocommerce根据选定shipping method重定向到不同thank you page的问题排查
Woocommerce结账后按配送方式跳转感谢页问题修复
核心错误原因
- 逻辑顺序错误:第一个if判断只要命中订单收到页就直接跳转默认感谢页,后续配送方式的elseif分支完全不会执行
- $order对象未初始化:代码中没有获取当前订单实例,直接调用
$order->has_shipping_method()会触发致命错误,逻辑直接中断 - 配送方式判断的作用域错误:配送方式是订单的属性,必须放在订单收到页的判断逻辑内部执行,外部无法拿到对应订单数据
修复后完整代码
// 按配送方式跳转对应感谢页 add_action( 'template_redirect', 'woo_custom_redirect_after_purchase' ); function woo_custom_redirect_after_purchase() { global $wp; // 校验当前为订单收到页 if ( is_checkout() && !empty( $wp->query_vars['order-received'] ) ) { $order_id = absint( $wp->query_vars['order-received'] ); $order = wc_get_order( $order_id ); // 订单不存在时直接返回避免报错 if ( !$order ) { return; } // 匹配配送方式跳转对应页面 if ( $order->has_shipping_method('local_pickup:7') ) { wp_redirect( 'https://mywebsite.com/thank-you-page-2/' ); exit; } elseif( $order->has_shipping_method('flat_rate:1') ) { wp_redirect( 'https://mywebsite.com/thank-you-page-3/' ); exit; } else { // 其余场景跳转默认感谢页 wp_redirect( 'https://mywebsite.com/thank-you-page-1/' ); exit; } } }
校验注意项
- 请确认配送方式标识完全匹配:进入Woocommerce后台「设置」-「配送」-对应配送区,hover对应配送方式后查看浏览器地址栏的
instance_id参数,核对local_pickup:7、flat_rate:1的后缀ID是否正确 - 替换代码中站点链接为实际的感谢页地址
- 测试时清空浏览器缓存,避免旧重定向缓存影响效果
内容的提问来源于stack exchange,提问作者MAQ Khan
相关产品推荐
相关产品推荐

