Add to cart and redirect to checkout for variable products in WooCommerce
Update 3
The following code will handle simple and variable products adding an additional Add to cart button that redirects to cart (with synchronized quantity).
The code works for simple and variable products as well.
add_action( 'woocommerce_after_add_to_cart_button', 'add_custom_addtocart_and_checkout' );function add_custom_addtocart_and_checkout() { global $product; $addtocart_url = wc_get_checkout_url().'?add-to-cart='.$product->get_id(); $button_class = 'single_add_to_cart_button button alt custom-checkout-btn'; $button_text = __("Buy & Checkout", "woocommerce"); if( $product->is_type( 'simple' )) : ?> <script> jQuery(function($) { var url = '<?php echo $addtocart_url; ?>', qty = 'input.qty', button = 'a.custom-checkout-btn'; // On input/change quantity event $(qty).on('input change', function() { $(button).attr('href', url + '&quantity=' + $(this).val() ); }); }); </script> <?php elseif( $product->is_type( 'variable' ) ) : $addtocart_url = wc_get_checkout_url().'?add-to-cart='; ?> <script> jQuery(function($) { var url = '<?php echo $addtocart_url; ?>', vid = 'input[name="variation_id"]', pid = 'input[name="product_id"]', qty = 'input.qty', button = 'a.custom-checkout-btn'; // Once DOM is loaded setTimeout( function(){ if( $(vid).val() != '' ){ $(button).attr('href', url + $(vid).val() + '&quantity=' + $(qty).val() ); } }, 300 ); // On input/change quantity event $(qty).on('input change', function() { if( $(vid).val() != '' ){ $(button).attr('href', url + $(vid).val() + '&quantity=' + $(this).val() ); } }); // On select attribute field change event $('.variations_form').on('change blur', 'table.variations select', function() { if( $(vid).val() != '' ){ $(button).attr('href', url + $(vid).val() + '&quantity=' + $(qty).val() ); } }); }); </script> <?php endif; echo '<a href="'.$addtocart_url.'" class="'.$button_class.'">'.$button_text.'</a>';}
Code goes in function.php file of your active child theme (or active theme). Tested and works.