2026年8月26日
2026年8月26日
WordPressのログイン後に特定ページへリダイレクトする方法|login_redirectと権限別の振り分け
WordPress では、ログインすると通常は管理画面(ダッシュボード)に移動します。会員向けのページやマイページに移動させたい場合は、ログインのリンクに移動先を付けるか、login_redirect フィルターで移動先を決めるか、プラグインを使います。この記事では、それぞれの方法と、コードを書くときに間違えやすい点を説明します(2026年10月時点の WordPress のソースコードと公式リファレンスに基づきます)。
方法の選び方
| 方法 | 向いている場合 | コード |
|---|---|---|
redirect_to パラメーター |
特定のリンクやログインフォームから来た人だけ、移動先を変えたい | 不要(URL か wp_login_url()) |
login_redirect フィルター |
権限グループやユーザーによって、移動先を決めたい | 必要 |
| プラグイン(LoginWP など) | コードを書かずに、権限グループ別などの規則を画面で設定したい | 不要 |
方法1: redirect_to パラメーターで移動先を指定する
ログイン画面の URL に redirect_to を付けると、ログインに成功した後にその URL へ移動します。
https://example.com/wp-login.php?redirect_to=https%3A%2F%2Fexample.com%2Fmembers%2F
テーマやプラグインの中でリンクを作る場合は、wp_login_url() に移動先を渡すと、URL のエンコードまで行われます。
<?php
// ログイン後に /members/ へ移動するログインリンクを出力する
echo '<a href="' . esc_url( wp_login_url( home_url( '/members/' ) ) ) . '">ログイン</a>';
ページ内にログインフォームを置く wp_login_form() では、redirect で移動先を指定します。
<?php
wp_login_form( array(
'redirect' => home_url( '/members/' ),
) );
方法2: login_redirect フィルターで移動先を決める
ログインする人によって移動先を変えるなら、login_redirect フィルターを使います。このフィルターには3つの値が渡されます。
| 引数 | 内容 |
|---|---|
$redirect_to |
WordPress が決めた移動先の URL |
$requested_redirect_to |
redirect_to パラメーターで指定された URL(指定が無ければ空) |
$user |
ログインに成功したら WP_User、失敗したら WP_Error |
3つ目の $user を受け取るには、add_filter() の4番目の引数に 3 を指定する必要があります。省略すると最初の1つしか渡されません。また、このフィルターはログインに失敗したときやログイン画面を表示しただけのときにも呼ばれるため、$user が WP_User かどうかを確かめてから使います。
コードは、子テーマの functions.php か、wp-content/mu-plugins/ に置いた PHP ファイルに書きます。親テーマの functions.php に書くと、テーマの更新で消えます。
全員を同じページへ移動させる
<?php
// ログイン後は全員を /members/ へ移動させる
add_filter( 'login_redirect', function ( $redirect_to, $requested_redirect_to, $user ) {
if ( ! ( $user instanceof WP_User ) ) {
return $redirect_to; // ログイン失敗時などはそのまま
}
return home_url( '/members/' );
}, 10, 3 );
権限グループによって移動先を分ける
管理者と編集者は管理画面へ、それ以外は会員ページへ移動させる例です。リンクで redirect_to が指定されているときは、その指定を優先します。
<?php
add_filter( 'login_redirect', function ( $redirect_to, $requested_redirect_to, $user ) {
if ( ! ( $user instanceof WP_User ) ) {
return $redirect_to;
}
// リンクで移動先が指定されていれば、それに従う
if ( '' !== $requested_redirect_to ) {
return $redirect_to;
}
$roles = (array) $user->roles;
if ( array_intersect( array( 'administrator', 'editor' ), $roles ) ) {
return admin_url();
}
if ( in_array( 'subscriber', $roles, true ) ) {
return home_url( '/members/' );
}
return $redirect_to;
}, 10, 3 );
特定のユーザーだけを別のページへ移動させたい場合は、$user->ID や $user->user_login で判定します。$_GET['user_id'] のように URL の値でユーザーを判定する書き方は、ログインした本人とは関係のない値を見ることになるため使えません。
書くときの注意
- 別のドメインには移動できない: ログイン後の移動は
wp_safe_redirect()で行われるため、自分のサイト以外の URL を返すと管理画面に戻されます。別のドメインに移動させるなら、allowed_redirect_hostsフィルターでそのホストを許可します。 - 管理画面を使えない権限グループ: 移動先が管理画面のままで、そのユーザーが投稿の編集権限を持たない場合、WordPress はプロフィール画面(
profile.php)へ移動させます。購読者を管理画面に入れたくないなら、上の例のように会員ページの URL を返します。 $_SESSIONは使わない: WordPress 本体は PHP のセッションを使っていません。ログイン前のページに戻したいなら、セッションに保存するよりredirect_toパラメーターでログイン画面に渡すほうが確実です。- 移動先のページを用意する: 返した URL のページが存在しないと、ログイン直後に 404 になります。
ログアウト後の移動先を変える
ログアウトした後の移動先は、logout_redirect フィルターで変えられます。引数は login_redirect と同じ並び(移動先、指定された移動先、ユーザー)です。
<?php
// ログアウト後はトップページへ移動させる
add_filter( 'logout_redirect', function ( $redirect_to, $requested_redirect_to, $user ) {
return home_url( '/' );
}, 10, 3 );
ログアウトのリンクを作る wp_logout_url() に移動先を渡す方法もあります。
方法3: プラグインで設定する
コードを書かずに設定するなら、wordpress.org で配布されている「LoginWP (Formerly Peter's Login Redirect)」が使えます。2026年10月時点の配布ページの説明では、無料版で次の規則を設定できます。
- 特定のユーザー、権限グループ、権限(capability)ごとのログイン後の移動先
- どの規則にも当てはまらない人の移動先
- ユーザー登録後の移動先
設定画面の場所や項目名はバージョンによって変わるため、導入後にプラグインの画面と配布ページの説明で確認してください。会員プラグインや WooCommerce のマイページから行うログインでは、そのプラグインが独自に移動先を決めていることがあります。その場合は、使っているプラグインの設定や説明書を確認します。
動作を確かめる
- 権限グループごとにテスト用のユーザーを作り、ログインして移動先を確認する
redirect_to付きのリンクからログインし、指定した URL に移動するかを確認する- パスワードを間違えたときに、エラー表示のままログイン画面に残るかを確認する
- キャッシュプラグインを使っている場合は、移動先のページがログイン中にキャッシュを返していないかを確認する
まとめ
- リンクごとに移動先を変えるなら、
redirect_toパラメーター(wp_login_url()・wp_login_form())を使う - 人によって移動先を変えるなら
login_redirectフィルターを使い、add_filter()に10, 3を指定して$userを受け取る $userはログインに失敗するとWP_Errorになるため、WP_Userかどうかを確かめる- 外部ドメインへの移動は
allowed_redirect_hostsで許可が必要。ログアウト後はlogout_redirectで変える - コードを書かないなら LoginWP などのプラグインで、権限グループ別の規則を設定できる