WordPressでログイン/ログアウト後、特定のページに移動するようにしたい場合があります。 この場合 ログインWPなどのプラグインを使用すると、簡単にログインまたはログアウトしてから、目的の場所にリダイレクトできます。 プラグインの使用を好まない場合は、以下で紹介するコードを参考にしてください。
[この記事を2022年5月3日に最終更新されました。 ]
ログアウト後、特定のページにリダイレクト(移動)
WordPressでは、ログアウト後に移動(リダイレクト)は、ページを変更できるようにフィルタを提供します。 次の関数をテーマの関数ファイル(functions.php)に追加して、ログアウト時に特定のページにリダイレクトできます。
add_filter( 'wpmem_logout_redirect', 'my_logout_redirect' ); function my_logout_redirect() { // 로그아웃 시 리디렉션될 URL 반환 return 'http://yourdomain.com/your-page'; }
ログアウト後、現在のページを超えないようにする
もしログアウト時現在のページから抜け出せないようにするには、次のような関数を使用することができます。
function wpse_44020_logout_redirect($logouturl, $redir) { return $logouturl . '&redirect_to='.get_permalink(); } add_filter('logout_url', 'wpse_44020_logout_redirect', 10, 2); // Source: http://wordpress.stackexchange.com/
ちなみに、上記のコードは、管理者以外のページでのみ動作します。 すべてのページで動作するように次の行を
return $logouturl . '&redirect_to='.get_permalink();
次のように変更するようにします。
return $logouturl . '&redirect_to=http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
そして Peter's Login Redirectというプラグインを使用すると、ログインおよびログアウト時にユーザー別、権限ごとにページを指定することができます。
Peter's Login Redirect プラグインは長い間放置されており、プラグイン名を LoginWP に変えながら活発にアップデートされているようです。
ログイン後にリダイレクト
参考までにログインした後リダイレクトは、次のような関数を使用することができています。
function restrict_access_if_logged_out(){ if (!is_user_logged_in() && !is_home()){ $redirect = home_url() . '/wp-login.php?redirect_to=' . urlencode( $_SERVER['REQUEST_URI'] ); wp_redirect( $redirect ); exit; } } add_action( 'wp', 'restrict_access_if_logged_out', 3 ); // Source: http://wpscholar.com/
上記の関数は、テーマに沿ってうまく動作しない場合もあります。 その場合は、以下を参考に正しく動作する関数を探してみてください。
次の関数は、ログイン後、一般ユーザーを現在のページにリダイレクトされます(ページを抜け出せない)。
// Redirects to current page after login in wordpress for non-administrators function acme_login_redirect( $redirect_to, $request, $user ) { return ( is_array( $user->roles ) && in_array( 'administrator', $user->roles ) ) ? admin_url() : get_permalink(); } add_filter( 'login_redirect', 'acme_login_redirect', 10, 3 );
ホームページにリダイレクトさせるには get_permalink() 部分を site_url()で置き換えるようです。 次の関数は、ログイン後、一般ユーザーをホームページに転送されます。
// Redirects normal users (non-administrators) to homepage after login // Redirects adminstrators to Dashboard function acme_login_redirect( $redirect_to, $request, $user ) { return ( is_array( $user->roles ) && in_array( 'administrator', $user->roles ) ) ? admin_url() : site_url(); } add_filter( 'login_redirect', 'acme_login_redirect', 10, 3 );
次の関数を追加すると、メニュー名が「primary」のメニューにログイン/ログアウトメニュー項目が追加されます。 ログイン/ログアウト後も現在のページを離れることはありません。
// Add Login and Logout menu itmes to menu whose menu name (theme_location) is 'primary' // Redirects to current page after login/lgout add_filter( 'wp_nav_menu_items', 'wti_loginout_menu_link', 10, 2 ); function wti_loginout_menu_link( $items, $args ) { if ($args->theme_location == 'primary') { if (is_user_logged_in()) { $items .= '<li class="right"><a href="'. wp_logout_url( get_permalink() ) .'">Logout</a></li>'; // 로그아웃 } else { $items .= '<li class="right"><a href="'. wp_login_url(get_permalink()) .'">Login</a></li>'; // 로그인 } } return $items; } // Source: stackexchange
リダイレクトさせる様々な方法があります。 通常は、簡単な関数のコードで動作するが、場合によってはテーマに沿って、あるいはインストールされたプラグインとの衝突などで正常に動作しない場合があります。 さまざまな方法でテストして、使用中の環境とよく合う方法を見つけてください。
参照:
- wp login url (WordPress Codexページ)
- wp logout url (WordPress Codexページ)
- wp loginout (WordPress Codexページ)
うまく動作しますね。 ありがとうございます。
ご確認いただきありがとうございます。寒い天気に気をつけてください。