我希望使多个特定的订阅产品跳过购物车,直接去结帐。我在这里找到了以下代码(仅针对一种产品),该代码使用产品ID跳过了针对一种产品的代码,但无法使其适用于多种产品。还尝试了其他各种方法,但似乎都不适合Woocommerce 4.51
How to skip cart page on woocomerce for certain products only?
add_filter( 'woocommerce_add_to_cart_redirect', 'woo_redirect_checkout' );
function woo_redirect_checkout() {
global $woocommerce;
$desire_product = '73458';
//Get product ID
$product_id = (int) apply_filters( 'woocommerce_add_to_cart_product_id', $_POST['add-to-cart'] );
//Check if current product is subscription
if ( $product_id == $desire_product ){
$checkout_url = $woocommerce->cart->get_checkout_url();
return $checkout_url;
exit;
} else {
$cart_url = $woocommerce->cart->get_cart_url();
return $cart_url;
exit;
}
}
答案 0 :(得分:2)
通过woocommerce_add_to_cart_redirect
过滤器,您可以访问已添加到购物车的产品的产品对象。因此,您可以检查订阅产品类型:
add_filter( 'woocommerce_add_to_cart_redirect', 'woo_redirect_checkout', 10, 2 );
function woo_redirect_checkout( $url, $product ) {
return $product->get_type() == 'subscription' ? wc_get_checkout_url() : $url;
}
现在所有类型为subscription
的产品都将重定向到结帐页面,而不是购物车。
如果您不希望所有订阅产品都重定向到结帐,而只希望重定向某些类别的订阅,则可以先从产品对象中检索产品类别,然后查看它们是否与{{1 }}数组:
$checkout_cats