コフス技術ブログ

WordPressにてログイン時/ログアウト時にユーザー別にリダイレクトさせる例

WordPressでは標準でユーザー管理機能が付いており、この機能を用いてユーザーレベル別で様々な処理を行うことが出来ます。

ログイン時にトップへリダイレクトさせる

例えば管理者権限のアカウント以外のユーザーがログインした時、管理画面(ダッシュボード)ではなくトップページにリダイレクトさせたい場合は以下の様な例で可能になります。

functions.php
/**
 * ログイン時に管理者権限以外のユーザーをリダイレクト.
 *
 * @param string $user_login .
 * @param array $user .
 */
function login_redirect( $user_login, $user ) {
  if ( 'subscriber' === $user->roles[0] ) {
    wp_safe_redirect( home_url(), 301 );
    exit();
  }
}
add_action( 'wp_login', 'login_redirect', 10, 2 );

上記例では購読者の場合にログイン時に管理画面には行かず、トップページでリダイレクトさせる事が出来ますが、他のユーザーレベルを指定することも勿論可能です。

  • subscriber:購読者
  • contributor:寄稿者
  • author:投稿者
  • editor:編集者
  • administrator:管理者

リダイレクト以外の処理でもユーザーレベル別でログイン時の挙動を変更したい場合はwp_loginアクションフックで色々処理するといいでしょう。

ログアウト時にトップへリダイレクトさせる

逆にログアウト時に管理者権限以外の場合、トップページへリダイレクトさせたい場合は以下の例で可能になります。

functions.php
/**
 * 管理者権限以外のユーザーはログアウト時にリダイレクト.
 */
function logout_redirect() {
  if ( ! current_user_can( 'administrator' ) && ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) ) {
    wp_safe_redirect( home_url(), 301 );
    exit;
  }
}
add_action( 'wp_logout', 'logout_redirect', 10, 2 );

アクションフックwp_logoutを用いる事でログアウト時の挙動を変更することが出来ます。

管理者以外の判定は! current_user_can( 'administrator' )の部分。ユーザー権限の中でadministratorつまり管理者以外の場合トップページへリダイレクトさせるという流れですね。

管理者権限以外の場合、管理画面(ダッシュボード)へアクセスされたらリダイレクトさせる

ログイン/ログアウトの処理とは別ですが、管理画面へのアクセスをリダイレクトさせる事も可能です。以下の例だと管理者権限以外の場合、管理画面のURLへアクセスしてもトップページへリダイレクトが掛かります。

購読者ユーザーなど基本的に管理画面を触れる必要が無い権限者の場合のUX改善などで活用できるかもしれませんね。

functions.php
/**
 * 管理者権限以外のユーザーは管理画面アクセス時にリダイレクト.
 */
function restrict_admin() {
  if ( ! current_user_can( 'administrator' ) && ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) ) {
    wp_safe_redirect( home_url(), 301 );
    exit;
  }
}
add_action( 'admin_init', 'restrict_admin', 1 );