如何在基于角色的特定用户登录时重定向?

时间:2011-07-07 作者:Zach Shallbetter

我想根据用户的角色,使用

if ( current_user_can(\'contributor\') )
以及主要登录功能

function wp_loginout($redirect = \'\', $echo = true) {
    if ( ! is_user_logged_in() )
        $link = \'<a href="\' . esc_url( wp_login_url(get_permalink()) ) . \'">\' . __(\'Log in\') . \'</a>\';
    else
        $link = \'<a href="\' . esc_url( wp_logout_url(get_permalink()) ) . \'">\' . __(\'Log out of account\') . \'</a>\';

    if ( $echo )
        echo apply_filters(\'loginout\', $link);
    else
        return apply_filters(\'loginout\', $link);
}
我尝试了很多组合,但似乎都失败了。任何帮助都将不胜感激。

2 个回复
最合适的回答,由SO网友:Milo 整理而成

filter login_redirect:

function my_login_redirect_contributors() {
  if ( current_user_can(\'contributor\') ){
      return \'url-to-redirect-to\';
  }
}

add_filter(\'login_redirect\', \'my_login_redirect_contributors\');
SO网友:MikeSchinkel

虽然这个问题已经提了一年了,但希望这能帮助一些人。

我遇到了一个案例,因为全球$current_user 是一个WP_User 对象,但具有空值。以下代码是我发现可以工作的代码。注意第三个参数的使用$user:

function 22352_login_redirect( $redirect_url, $POST_redirect_url, $user ) {
  if ( is_a( $user, \'WP_User\' ) && $user->has_cap( \'manage_options\' ) ) {
    $redirect_url = \'url-to-redirect-to\';
  }
  return $redirect_url;
}
add_filter( \'login_redirect\', array( $this, \'wpse22352_login_redirect\' ), 10, 3 );

结束