如果在 WooCommerce 的购物车页面上清空购物车,则重定向到商店 3+

时间:2021-01-22 23:06:43

标签: php jquery wordpress redirect woocommerce

在 WooCommerce 中,我想在购物车为空时从购物车重定向到商店页面,并且我正在使用此代码:

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' );

此代码仅在购物车为空并且我尝试进入购物车页面时才有效。但是如果我已经在购物车页面上并且我删除了所有购物车项目,我必须重新加载页面才能重定向。所以我想我必须在代码中添加一些东西来重新加载页面。有什么想法吗?

如果有人可以帮助我,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

自 WooCommerce 版本 3 以来,您的代码有点过时。现在在购物车页面上,PHP 重定向没有用,因为 清空购物车 是 Ajax 客户实时事件。因此,在这种情况下,需要 Javascript (jQuery)。

改用以下内容,处理所有情况:

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;
}

代码位于活动子主题(或活动主题)的functions.php 文件中。自第 3 版以来,已在所有 WooCommerce 版本中进行测试和工作。