跳过WooCommerce购物车以获取特定的订阅产品

时间:2020-09-23 18:44:29

标签: php wordpress woocommerce

我希望使多个特定的订阅产品跳过购物车,直接去结帐。我在这里找到了以下代码(仅针对一种产品),该代码使用产品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;

   }

}

1 个答案:

答案 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