首页 > 解决方案 > woocommerce_login_redirect 到购物车(如果不为空)

问题描述

好的,这很奇怪,听我说:

function ts_redirect_login( $redirect, $user){


if(!WC()->cart->is_empty()){
        $redirect = wc_get_cart_url();
}
else{
        $redirect = get_home_url();
}


return $redirect;

}
add_filter( 'woocommerce_login_redirect', 'ts_redirect_login', 10, 2 );

如果用户浏览站点(未登录),添加项目并登录,则此方法有效。登录后,他将被重定向到购物车。

如果用户在登录时将商品添加到购物车,则此方法不起作用,退出站点并返回登录。登录后它将用户重定向到主页,就好像购物车中没有商品一样。一旦登录,如果我去购物车它不是空的,但重定向没有发生。

所以我的问题是:当他登录时,如何重定向在先前会话中添加项目的用户?

var_dump 仅在 is_empty() 添加一个有意义的未登录项目时才显示错误,它不知道我将登录哪个用户以及我的购物车中是否有产品。但是一旦我登录,如果我有物品,我不能被重定向到购物车吗?

标签: phpwordpresswoocommercecarthook-woocommerce

解决方案


function ts_redirect_login( $redirect, $user ) {

    $saved_cart = '';

    $saved_cart_meta = get_user_meta( $user->ID, '_woocommerce_persistent_cart_' . get_current_blog_id(), true );

    if ( isset( $saved_cart_meta[ 'cart' ] ) ) {
        $saved_cart = array_filter( (array) $saved_cart_meta[ 'cart' ] );
    }

    if ( $saved_cart || !WC()->cart->is_empty()) {
        $redirect = wc_get_cart_url();
    } else {
        $redirect = get_home_url();
    }
    return $redirect;
}

add_filter( 'woocommerce_login_redirect', 'ts_redirect_login', 10, 2 );

这就是你要找的


推荐阅读