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() でロール判定し、管理者は管理画面、一般ユーザーはマイページやトップページへ誘導するのがおすすめです。