如何针对特定商品分类实现Add to cart跳转WooCommerce结账页?
WooCommerce 指定商品分类跳过购物车直接跳转结账页解决方案
问题原因
你之前的代码无效,核心原因有两个:
has_term()函数默认依赖全局$post对象,但在主题functions.php的全局作用域中,没有对应要添加购物车的商品上下文,无法正确识别目标商品,自然判断失效。- 直接在全局作用域通过
if条件添加add_filter,只会在主题加载时执行一次,不会在用户点击「加入购物车」时动态判断当前商品分类,逻辑时机完全错误。
正确实现代码
修改跳转逻辑,在 add_to_cart_redirect 过滤器的回调函数内部,动态获取当前添加的商品ID并判断分类:
function skip_cart_for_specific_category( $redirect_url ) { // 获取当前点击加入购物车的商品ID $product_id = isset( $_REQUEST['add-to-cart'] ) ? absint( $_REQUEST['add-to-cart'] ) : 0; // 判断商品是否属于指定分类(这里替换成你的分类slug或ID) if ( $product_id && has_term( 'test', 'product_cat', $product_id ) ) { // 跳转到结账页 return wc_get_checkout_url(); } // 非目标分类商品,返回默认跳转地址(购物车页) return $redirect_url; } add_filter( 'add_to_cart_redirect', 'skip_cart_for_specific_category' );
代码说明
- 通过
$_REQUEST['add-to-cart']获取用户当前点击加入购物车的商品ID,确保判断的是正确的目标商品。 has_term()第三个参数传入商品ID,明确指定要检查的商品,避免全局上下文缺失的问题。- 非目标分类商品保持原有跳转逻辑,不影响其他商品的购物流程。
内容的提问来源于stack exchange,提问作者alench
相关产品推荐
相关产品推荐

