2

In WooCommerce I want to redirect from cart to shop page when cart is empty and I am using this code:

function cart_empty_redirect_to_shop(){
    global $woocommerce;

    if ( is_page('cart') and !sizeof($woocommerce->cart->cart_contents) ) {
        wp_redirect( get_permalink( wc_get_page_id( 'shop' ) ) ); exit;
    }
}
add_action( 'wp_head', 'cart_empty_redirect_to_shop' );

This code works only if cart is empty and I try to go on cart page. But if I am already on cart page and I remove all cart items, I have to reload the page to get redirected. So I guess I have to add something in the code to reload the page. Any thoughts?

I would appreciate if anyone could help me with this.

LoicTheAztec
  • 229,944
  • 23
  • 356
  • 399

1 Answers1

4

Your code is a bit obsolete since WooCommerce version 3. Now on cart page, PHP redirect is useless, because Emptying cart is an Ajax customer live event. So in this case Javascript (jQuery) is required.

Use the following instead, that handle all cases:

add_action( 'template_redirect', 'empty_cart_redirection' );
function empty_cart_redirection(){
    if( is_cart() ) :
    
    // Here set the Url redirection
    $url_redirection = get_permalink( wc_get_page_id( 'shop' ) );
    
    // When trying to access cart page if cart is already empty  
    if( WC()->cart->is_empty() ){
        wp_safe_redirect( $url_redirection );
        exit();
    }
    
    // When emptying cart on cart page
    wc_enqueue_js( "jQuery(function($){
        $(document.body).on( 'wc_cart_emptied', function(){
            if ( $( '.woocommerce-cart-form' ).length === 0 ) {
                $(window.location).attr('href', '" . $url_redirection . "');
                return;
            }
        });
    });" );
    endif;
}

Code goes in functions.php file of the active child theme (or active theme). Tested and works in all WooCommerce versions since version 3.

LoicTheAztec
  • 229,944
  • 23
  • 356
  • 399
  • IT WORKED! THANK YOU SO MUCH FOR YOU HELP! – Sara Nazeriha Jan 23 '21 at 23:49
  • When I try to replace `shop` with anything like `home` o `/` or even `./` nothing works. How do I customize this to redirect and GO HOME instead of shop? I also tried using page ID and that doesn't work either. please advise @LoicTheAztec and thanks for the share. – Uncle Iroh Mar 01 '23 at 21:45
  • i replaced line #6 with `$url_redirection = home_url() ;` and now i can redirect to home page. – Uncle Iroh Mar 03 '23 at 16:27