How to skip cart page on woocomerce for certain products only? How to skip cart page on woocomerce for certain products only? wordpress wordpress

How to skip cart page on woocomerce for certain products only?


You need to get the product when It is just added to cart , then check if for this product you want to redirect the cart page to checkout page . You need to change $desire_product = 'certain_product'; line on below code and It will definitely work.

add_filter( 'woocommerce_add_to_cart_redirect', 'woo_redirect_checkout' );function woo_redirect_checkout() {    global $woocommerce;    $desire_product = 'certain_product';    //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;    }}


I wrote a little plugin for this, sharing it here. The plugin adds a small checkbox to the product metabox, so you can specify which products should trigger the automatic skip to checkout. Basically using the same woocommerce_add_to_cart_redirect filter as in the other answers, but providing the admin backend option to determine which products trigger the redirection.

<?php/** * Plugin Name: Redirect to checkout * Plugin URI: http://stackoverflow.com/q/32962653/383847 * Description: redirect to checkout for certain products  * Version: 1.0 * Author: Kathy Darling * Author URI: http://kathyisawesome.com * Requires at least: 3.8 * Tested up to: 3.9 * * Text Domain: kia-redirect-to-checkout * Domain Path: /languages/ * */if ( ! defined( 'ABSPATH' ) ) {    exit; // Exit if accessed directly}/** Add text inputs to product metabox*/function kia_add_to_wc_metabox(){    global $post;    echo '<div class="options_group">';    // Suggested Price    echo woocommerce_wp_checkbox( array(        'id' => '_redirect_to_checkout',        'label' => __( 'Redirect to checkout', 'kia-redirect-to-checkout' ) ,        'description' => __( 'When this item is added to the cart, re-direct the customer to checkout immediately.', 'kia-redirect-to-checkout' )        )    );    echo '</div>';}add_action( 'woocommerce_product_options_general_product_data', 'kia_add_to_wc_metabox' );/* * Save extra meta info */function kia_process_wc_meta_box( $post_id, $post ) {    if ( isset( $_POST['_redirect_to_checkout'] ) ) {        update_post_meta( $post_id, '_redirect_to_checkout', 'yes' );    } else {        update_post_meta( $post_id, '_redirect_to_checkout', 'no' );    }}add_action( 'woocommerce_process_product_meta', 'kia_process_wc_meta_box', 1, 2 );/* * Redirect to checkout */function kia_add_to_cart_redirect( $url ){    // If product is one of our special types    if ( is_numeric( $_REQUEST['add-to-cart'] ) && kia_maybe_redirect_cart( (int) $_REQUEST['add-to-cart'] ) ) {        // Remove default cart message        WC()->clear_messages();        // Redirect to checkout        $url = WC()->cart->get_checkout_url();    }    return $url;}add_filter( 'woocommerce_add_to_cart_redirect', 'kia_add_to_cart_redirect' );/* * check if an item has custom field */function kia_maybe_redirect_cart( $product_id ){    if ( 'yes' == get_post_meta( $product_id, '_redirect_to_checkout', true ) ){        return TRUE;    } else {        return false;    }}

Updating WooCommerce 3.0+

<?php/** * Plugin Name: WC Redirect to checkout * Plugin URI: http://stackoverflow.com/q/32962653/383847 * Description: Redirect to checkout for certain products  * Version: 1.0 * Author: Kathy Darling * Author URI: http://kathyisawesome.com * Requires at least: 3.8 * Tested up to: 3.9 * WC requires at least: 3.1.0 * WC tested up to: 4.0.1 * * Text Domain: kia-redirect-to-checkout * Domain Path: /languages/ * */if ( ! defined( 'ABSPATH' ) ) {    exit; // Exit if accessed directly}/** * Add text inputs to product metabox */function kia_add_to_wc_metabox(){    global $post;    echo '<div class="options_group">';    // Suggested Price    echo woocommerce_wp_checkbox( array(        'id' => '_redirect_to_checkout',        'label' => __( 'Redirect to checkout', 'kia-redirect-to-checkout' ) ,        'description' => __( 'When this item is added to the cart, re-direct the customer to checkout immediately.', 'kia-redirect-to-checkout' )        )    );    echo '</div>';}add_action( 'woocommerce_product_options_general_product_data', 'kia_add_to_wc_metabox' );/** * Save extra meta info * * @param  WC_Product  $product */function kia_process_wc_meta_box( $product ) {    if ( isset( $_POST['_redirect_to_checkout'] ) ) {        $product->update_meta_data( '_redirect_to_checkout', 'yes' );    } else {        $product->update_meta_data( '_redirect_to_checkout', 'no' );    }}add_action( 'woocommerce_admin_process_product_object', 'kia_process_wc_meta_box' );/** * Redirect to checkout * * @param  WC_Product  $product */function kia_add_to_cart_redirect( $url, $product ) {    // If product is one of our special products.    if ( kia_maybe_redirect_cart( $product ) ) {        // Remove default cart message.        wc_clear_notices();        // Redirect to checkout.        $url = wc_get_checkout_url();    }    return $url;}add_filter( 'woocommerce_add_to_cart_redirect', 'kia_add_to_cart_redirect', 10, 2 );/** * Check if an item has custom field. * * @param  WC_Product  $product */function kia_maybe_redirect_cart( $product ) {    return wc_string_to_bool( $product instanceof WC_Product && $product->get_meta( '_redirect_to_checkout', true ) );}

https://gist.github.com/helgatheviking/f76b97d7d19813538e32b8f5f2dae6ec


There are a few action hooks as well that you can use, for eg: woocommerce_add_to_cart which passes the product id to the callback function:

add_action( 'woocommerce_add_to_cart', 'custom_add_to_cart', 10, 2 );function custom_add_to_cart( $cart_item_key, $product_id ) {    // replace 123 with a valid product id    if( 123 == $product_id ) {        wp_redirect( WC()->cart->get_checkout_url() );        exit;       }}