WordPress:ログイン画面にログイン後に任意でページ移動できるセレクトボックスを表示させる方法

WordPress:ログイン画面にログイン後に任意でページ移動できるセレクトボックスを表示させる方法

使うことありそうなので備忘録。
WordPressはデフォルトだとログイン後にダッシュボードに移動しますが、それを任意のページに移動させるようにし、更にログイン画面にセレクトボックスを追加して移動したいページを選択できるようにする方法です。

カスタマイズ後のログイン画面

イメージはここで紹介してるカスタマイズ後のログイン画面で、このようにパスワード入力フィールド下に「ログイン後の移動ページ」としてセレクトボックスを追加されるようになります。
イメージではセレクトボックスの中身が「ダッシュボード」となっていますが、例えばこれを「プロフィール」を選択した状態でログインすると、管理画面ログイン後にプロフィールページに移動するという動きになります。

実装にはfunctions.phpに下記のように記述します。

functions.php

// ログイン画面にセレクトボックスを追加
function add_login_redirect_select_field() {
?>
  <p>
    <label for="rd">ログイン後の移動ページ</label>
    <select id="rd" name="rd" class="input">
      <option value="dashboard" selected="selected">ダッシュボード</option>
      <option value="postlist">投稿一覧</option>
      <option value="profile">プロフィール</option>
      <option value="home">TOPページ</option>
    </select>
  </p>
<?php
}
add_action( 'login_form', 'add_login_redirect_select_field' );

// それぞれどのページに移動するのかを指定
function custom_login_redirect( $redirect_to, $request, $user ) {
  if( ! empty( $_POST['rd'] ) ) {
    switch ( $_POST['rd'] ) {
      case 'dashboard':
        $redirect_to = admin_url();
        break;
      case 'postlist':
        $redirect_to = admin_url( '/edit.php' );
        break;
      case 'profile':
        $redirect_to = admin_url( '/profile.php' );
        break;
      case 'home':
        $redirect_to = home_url();
        break;
    }
  }
  return $redirect_to;
}
add_filter( 'login_redirect', 'custom_login_redirect', 10, 3 );

まずコード上部にある記述でセレクトボックスを表示させます。
label部分はセレクトボックス上に記載されている「ログイン後の移動ページ」というテキストになるので、テキストを変更したければこの部分を変更します。
次にセレクトボックス内のoptionに、移動させたいページについて記述していきます。
こちらも基本的に任意で好きな内容にしておけばいいですが、valueに記述したものは後で使用するので、わかりやすいものにしておいた方が良いと思います。
また、HTMLやクラス名などに関しても自由に記述して問題ないのですが、上記のようにp要素の中にselect class="input">とすることで、ログイン画面にデフォルトで表示されている「ユーザー名」と「パスワード」の見栄えと一緒にすることができます。
既にログイン画面の見栄えを大きく変えているとか組み方を変更しているという場合は、環境にあわせて別途スタイル調整した方が良いかもしれません。

次にコード下部ではそれぞれセレクトで選んだ項目がどのページに移動するのかを指定していきます。
指定にはまずcase 'foo':の部分でfooにはソース上部でoptionに記述したvalueの内容を、その下の$redirect_to = bar;にはそのvalueの場合にどのページに移動するのかをbarの箇所に記述します。
最後にbreak;を記述すれば完了で、case 'foo':,$redirect_to = bar;,break;の3つで1セットとなり、それをoption分記述していく感じになります。

上記を踏まえ、例えばログイン後に「投稿一覧」に移動させたいという時は、まずソース上部で<option value="postlist">投稿一覧</option>という形で項目を作成し、次にソース下部でcase 'postlist':$redirect_to = admin_url( '/edit.php' );を記述すれば実装をすることができます。

ログイン後にダッシュボード以外のページに移動させるのは「WordPress:ログイン後にダッシュボードには移動せずに、他ページヘリダイレクトさせる方法」でも実装はできるのですが、その時によって移動したいページが異なることが多いという人には地味に便利なカスタマイズかなと思います。


この実装方法にはついては、以下を参考にさせてもらいました。

また、もっと全体的に自分好みにカスタマイズしたい場合は以下でログイン画面をオリジナルにカスタマイズする方法をまとめているので、興味ある方はこちらもご覧ください。

Close the search window,
please press close button or esc key.