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 );