'WooCommerce after add to cart redirect to checkout

we are using WooCommerce Subscription and we want, that after a subscription is added to the cart redirect the customer to the checkout page. In the past I think there was a setting to set for this but I'm not able to find it. However, now I try to do it via code.

We use AJAX in order to add to the cart. But I think this will not work. And I have to disable ajax add to cart only for some products? Like check for a category?

So I have to disable ajax add to cart only for specific products and then redirect the customer when adding such a product to the cart to checkout. The code below works if I deactivate ajax add to cart for all products and also all product will redirect to the checkout. However, we only need it for specific products.

// redirect customer to checkout page
add_filter( 'woocommerce_add_to_cart_redirect', 'custom_skip_cart_redirect_checkout' );
 
function custom_skip_cart_redirect_checkout( $url ) {
    return wc_get_checkout_url();
}

// Fix for “Sold Individually” Products
add_filter( 'woocommerce_product_add_to_cart_url', 'custom_fix_for_individual_products', 10, 2 );
function custom_fix_for_individual_products( $add_to_cart_url, $product ){
 
    if( $product->get_sold_individually() // if individual product
    && WC()->cart->find_product_in_cart( WC()->cart->generate_cart_id( $product->id ) ) // if in the cart
    && $product->is_purchasable() // we also need these two conditions
    && $product->is_in_stock() ) {
        $add_to_cart_url = wc_get_checkout_url();
    }
 
    return $add_to_cart_url;
 
}

// Remove “The product has been added to your cart” message
add_filter( 'wc_add_to_cart_message_html', 'custom_remove_add_to_cart_message' );
 
function custom_remove_add_to_cart_message( $message ){
    return '';
}


Solution 1:[1]

Maybe it could help:

add_filter( 'woocommerce_add_to_cart_redirect', 'redirect_to_checkout_if_product_is_subscription', 99, 1 );
function redirect_to_checkout_if_product_is_subscription( $url ) {
    if ( ! isset( $_REQUEST['add-to-cart'] ) ) {
        return $url;
    }
    
    $product_id = intval( $_REQUEST['add-to-cart'] );

    if ( $product_id <= 0 ) {
        return $url;
    }

    $product = wc_get_product( $product_id );
    
    if ( WC_Subscriptions_Product::is_subscription( $product ) ) {
        $url = wc_get_checkout_url();
    }
    
    return $url;
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Artemy Kaydash