こんにちは、ryohei(@ityryohei)です!

本記事では、WordPressでログイン後にユーザーまたは権限別に特定のページにリダイレクト設定する方法をご紹介しています。

特定のユーザーだけログインした後にダッシュボード以外のページにリダイレクトさせたいけど、どうすればいいのかな?

上記のような疑問を解決できればと思います。

では、解説していきます。

WordPressのログイン後に実行するアクションフック

WordPressでは、この段階で何か処理を追加したい、という開発者向けにアクションフックという機能が用意されています。段階は細かく設けられており、ログインした直後に処理を追加するためのアクションフックがあります。wp_loginです。

使用方法は簡単で、関数を作成してアクションフックに追加します。下記の内容をテーマ内の「functions.php」に追加していただければ大丈夫です。

function my_func(){
    //ここにログインした後に実行する処理を追記する
}
add_action('wp_login', 'my_func');

続いてログイン後にユーザーまたは権限別にリダイレクトする処理を書いていきます。

ログイン後にユーザーのIDや名前でリダイレクト先を指定する

では実際にリダイレクトする処理を作っていきましょう。処理内容につきましてはサンプルコードにコメントを記載しておりますので、そちらを参考にしていただければと思います。

尚、本記事ではリダイレクトする方法として「wp_redirect()」を使用しています。

ユーザーIDによるリダイレクト

function redirect_after_login(){

    global $user;
    
    //ユーザーIDを取得
    $user_id = $user->ID;
    
    //ユーザーIDが「1」であれば
    if($user_id === 1){
        //「/sample_page」にリダイレクトする
        wp_redirect('/sample_page');
        exit;
    }
}
add_action('wp_login', 'redirect_after_login');

ユーザー名によるリダイレクト

function redirect_after_login(){

    global $user;
    
    //ユーザー名を取得
    $user_name = $user->user_login;
    
    //ユーザー名が「user01」であれば
    if($user_name === 'user01'){
        //「/sample_page」にリダイレクトする
        wp_redirect('/sample_page');
        exit;
    }
}
add_action('wp_login', 'redirect_after_login');

以上でログイン後にユーザーのIDや名前でリダイレクト先を指定することができます。

続いて権限によってリダイレクト先を指定してみたいと思います。

ログインしたユーザーの権限によってリダイレクト先を指定する

権限とは何ぞや? というと、ユーザーを作成する際に「権限グループ」なるものをセレクトボックスの中から選んだかと思います。WordPressには標準で下記のような権限グループがあり、下記の用にアクセスすることができる機能が制限されています。

管理者 administrator
シングルサイト内の全管理機能にアクセスすることができる。
編集物 editor
自身の投稿だけでなく、他ユーザーを含む全投稿を公開、管理することができる。テーマやプラグイン、サイト設定などの変更はできない。
投稿者 author
自身が作成した投稿のみ扱うことができる。他のユーザーの投稿や、固定ページなどにアクセスする権限はない。
寄稿者 contributor
レビュー状態の投稿を作成することができる。レビュー状態の投稿を公開するには、編集者以上の権限が必要。
寄稿者 subscriber
プロフィールの変更のみ可能。

取得したユーザー情報から権限グループを取得してリダイレクト先を指定してみましょう。

function redirect_after_login(){

    global $user;
    
    //ユーザーの権限を取得
    $user_role = $user->roles[0];

    //ユーザーの権限が「管理者」であれば
    if($user_role  === 'administrator'){
        //「/sample_page」にリダイレクトする
        wp_redirect('/sample_page');
        exit;
    }
}
add_action('wp_login', 'redirect_after_login');

administrator」の部分を他の権限グループに変更することで、それぞれのリダイレクト先を簡単に指定することができます。

ユーザーIDでも名前でも権限でもなく、他の情報でリダイレクト先を指定したい! という方は下記の情報を参考にコードを変更してみてください。

【参考情報】$userのダンプ結果(管理者)

object(WP_User)#0000(8) {
  ["data"]=>
  object(stdClass)#0000 (10) {
    ["ID"]=>
    string(1) "ユーザーID"
    ["user_login"]=>
    string(5) "ユーザー名"
    ["user_pass"]=>
    string(34) "ユーザーパスワード"
    ["user_nicename"]=>
    string(5) "ニックネーム"
    ["user_email"]=>
    string(25) "ユーザーメールアドレス"
    ["user_url"]=>
    string(0) ""
    ["user_registered"]=>
    string(19) "登録日"
    ["user_activation_key"]=>
    string(0) ""
    ["user_status"]=>
    string(1) "0"
    ["display_name"]=>
    string(5) "ブログ上の表示名"
  }
  ["ID"]=>
  int(1)
  ["caps"]=>
  array(1) {
    ["administrator"]=>
    bool(true)
  }
  ["cap_key"]=>
  string(15) "wp_capabilities"
  ["roles"]=>
  array(1) {
    [0]=>
    string(13) "administrator"
  }
  ["allcaps"]=>
  array(62) {
    ["switch_themes"]=>
    bool(true)
    ["edit_themes"]=>
    bool(true)
    ["activate_plugins"]=>
    bool(true)
    ["edit_plugins"]=>
    bool(true)
    ["edit_users"]=>
    bool(true)
    ["edit_files"]=>
    bool(true)
    ["manage_options"]=>
    bool(true)
    ["moderate_comments"]=>
    bool(true)
    ["manage_categories"]=>
    bool(true)
    ["manage_links"]=>
    bool(true)
    ["upload_files"]=>
    bool(true)
    ["import"]=>
    bool(true)
    ["unfiltered_html"]=>
    bool(true)
    ["edit_posts"]=>
    bool(true)
    ["edit_others_posts"]=>
    bool(true)
    ["edit_published_posts"]=>
    bool(true)
    ["publish_posts"]=>
    bool(true)
    ["edit_pages"]=>
    bool(true)
    ["read"]=>
    bool(true)
    ["level_10"]=>
    bool(true)
    ["level_9"]=>
    bool(true)
    ["level_8"]=>
    bool(true)
    ["level_7"]=>
    bool(true)
    ["level_6"]=>
    bool(true)
    ["level_5"]=>
    bool(true)
    ["level_4"]=>
    bool(true)
    ["level_3"]=>
    bool(true)
    ["level_2"]=>
    bool(true)
    ["level_1"]=>
    bool(true)
    ["level_0"]=>
    bool(true)
    ["edit_others_pages"]=>
    bool(true)
    ["edit_published_pages"]=>
    bool(true)
    ["publish_pages"]=>
    bool(true)
    ["delete_pages"]=>
    bool(true)
    ["delete_others_pages"]=>
    bool(true)
    ["delete_published_pages"]=>
    bool(true)
    ["delete_posts"]=>
    bool(true)
    ["delete_others_posts"]=>
    bool(true)
    ["delete_published_posts"]=>
    bool(true)
    ["delete_private_posts"]=>
    bool(true)
    ["edit_private_posts"]=>
    bool(true)
    ["read_private_posts"]=>
    bool(true)
    ["delete_private_pages"]=>
    bool(true)
    ["edit_private_pages"]=>
    bool(true)
    ["read_private_pages"]=>
    bool(true)
    ["delete_users"]=>
    bool(true)
    ["create_users"]=>
    bool(true)
    ["unfiltered_upload"]=>
    bool(true)
    ["edit_dashboard"]=>
    bool(true)
    ["update_plugins"]=>
    bool(true)
    ["delete_plugins"]=>
    bool(true)
    ["install_plugins"]=>
    bool(true)
    ["update_themes"]=>
    bool(true)
    ["install_themes"]=>
    bool(true)
    ["update_core"]=>
    bool(true)
    ["list_users"]=>
    bool(true)
    ["remove_users"]=>
    bool(true)
    ["promote_users"]=>
    bool(true)
    ["edit_theme_options"]=>
    bool(true)
    ["delete_themes"]=>
    bool(true)
    ["export"]=>
    bool(true)
    ["administrator"]=>
    bool(true)
  }
  ["filter"]=>
  NULL
  ["site_id":"WP_User":private]=>
  int(1)
}

多くの情報を取得することができるので、細かい設定ができそうですね!

最後に

WordPressでユーザー情報を取得する方法に「wp_get_current_user()」があります。本当はこちらを使用するべきですが、「wp_login」の実行段階だとうまく動かないケースがありましたので、global $user;で取得する方法を使用しています。もし「wp_get_current_user()」で動作する場合はユーザー情報の取得方法を差し替えてご利用ください。

以上、WordPressでログイン後にユーザーまたは権限別に特定のページにリダイレクト設定する方法のご紹介でした!