如何将LOGIN_REDIRECT与用户权能一起使用

时间:2019-01-14 作者:bigdaveygeorge

如果用户具有manage\\u woocommerce或更高的功能,下面的代码应该将用户重定向到特定页面,但实际上没有,只会转到主仪表板。

    add_filter( \'login_redirect\', array( $this, \'login_redirect\' ), 10, 3 );
    public function login_redirect( $redirect_to, $request, $user ) {

        if( is_user_logged_in() == 1 ) {

            if( $user->has_cap( \'manage_woocommerce\' ) ) {

                $redirect_to = get_admin_url() . \'admin.php?page=my-page\';

            }

        }

        return $redirect_to;

    }
我试过了$user->has_cap, current_user_can 同样的结果。

2 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

好吧,这不容易抓住,但是。。。您的代码中有一个主要问题。。。

您首先进行的检查是:

if ( is_user_logged_in() == 1 ) {
以及is_user_logged_in() 基于全局$current_user 变量但是正如你所读到的login_redirect hook docs:

运行此筛选器时,$current\\u user global可能不可用。因此,您应该使用传递给此筛选器的$user global或$user参数。

因此,这个条件不会得到满足-因此您的代码不会更改任何内容。

您应该使用$user 作为param传递的变量,因此这应该可以做到:

public function login_redirect( $redirect_to, $request, $user ) {

    if ( is_a ( $user , \'WP_User\' ) && $user->exists() ) {

        if ( $user->has_cap( \'manage_woocommerce\' ) ) {

            $redirect_to = get_admin_url() . \'admin.php?page=my-page\';

        }

    }

    return $redirect_to;
}
add_filter( \'login_redirect\', array( $this, \'login_redirect\' ), 10, 3 );

SO网友:John Zenith

您的代码很好,但您正在调用is_user_logged_in() 功能过早。它只有在再次加载页面后才能工作。因此,这里有一个简化且高效的版本来实现该功能:

add_filter( \'login_redirect\', array( $this, \'login_redirect\' ), 10, 3 );

public function login_redirect( $redirect_to, $request, $user )
{
    if ( $user instanceof WP_User && user_can( $user, \'manage_woocommerce\' ) ) {
        $redirect_to = get_admin_url() . \'admin.php?page=userexplorer-userify\';
    }

    return $redirect_to;
}

相关推荐

WP_LOGIN_Form()重定向同一页

我正在尝试使用wp\\u login\\u form()重定向同一页面。这是我的密码function loginform() { if ( is_user_logged_in()){ echo \'<p> <a href="\'.esc_url(home_url(\'/my-dashboard/\')).\'" >\'.esc_html( __( \'Thank you.! Please Go to dashboard\', \'mytheme