web-dev-qa-db-ja.com

ロールに基づいて特定のユーザーをログイン時にリダイレクトする方法

を使用して、自分の役割に基づいてログイン時に特定のページにユーザーを強制したいです。

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

フィルタ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');
6
Milo

この質問は1年前ですが、うまくいけばこれは何人かの人々を助けることができます。

グローバルな$current_userWP_Userオブジェクトであったがnull値を持っていたために、受け入れられた答えが機能しないケースに遭遇しました。次のコードは私がうまくいったことがわかったものです。 3番目のパラメータ$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 );
3
MikeSchinkel