2026年5月20日

2026年5月20日

WordPressのログイン後リダイレクト先をロール別に変更する方法

はじめに

WordPressのデフォルトではログイン後に管理画面(wp-admin)へリダイレクトされます。会員制サイトや投稿者向けサイトでは、ロールに応じてリダイレクト先を変えることでユーザー体験が向上します。

解決手順

ステップ1:login_redirectフィルタでロール別リダイレクト

// functions.php — ログイン後のリダイレクト先をロール別に設定
add_filter('login_redirect', function($redirect_to, $request, $user) {
    // WP_Userオブジェクトでない場合(ログイン失敗時等)はデフォルトを返す
    if (!($user instanceof WP_User)) {
        return $redirect_to;
    }

    // 管理者・編集者は管理画面へ
    if ($user->has_cap('edit_others_posts')) {
        return admin_url();
    }

    // 投稿者は新規投稿画面へ
    if ($user->has_cap('publish_posts')) {
        return admin_url('post-new.php');
    }

    // 一般ユーザー・購読者はトップページへ
    return home_url();
}, 10, 3);

ステップ2:ロール名で判定する場合

// functions.php — ロール名で直接判定
add_filter('login_redirect', function($redirect_to, $request, $user) {
    if (!($user instanceof WP_User)) {
        return $redirect_to;
    }

    $role = $user->roles[0] ?? '';

    return match($role) {
        'administrator' => admin_url(),
        'editor'        => admin_url('edit.php'),
        'author'        => admin_url('post-new.php'),
        'contributor'   => admin_url('edit.php?post_status=pending'),
        default         => home_url('/mypage/'),
    };
}, 10, 3);

ステップ3:ログアウト後のリダイレクト先も変更する

// functions.php — ログアウト後はトップページへ
add_filter('logout_redirect', function($redirect_to, $requested_redirect_to, $user) {
    return home_url();
}, 10, 3);

ステップ4:WP-CLIでユーザーのロールを確認してテスト

# ユーザーのロールを確認
wp user get testuser --fields=ID,user_login,roles

# テスト用に一時的にロールを変更
wp user set-role testuser subscriber

# ログインテスト後に元に戻す
wp user set-role testuser editor

注意事項

  • login_redirect フィルタのコールバックは引数を3つ受け取ります。add_filter の第4引数を 3 にしてください
  • $user->has_cap() は権限継承を考慮するため、ロール名での直接比較より堅牢です
  • リダイレクト先URLは wp_safe_redirect() が使用するホワイトリストと照合されます。外部URLへリダイレクトする場合は allowed_redirect_hosts フィルタでドメインを追加してください

まとめ

ログイン後のリダイレクト先は login_redirect フィルタで変更できます。$user->has_cap() でロール判定し、管理者は管理画面、一般ユーザーはマイページやトップページへ誘導するのがおすすめです。

お気軽にご相談ください

お見積りへ お問い合わせへ