ベストセラー人気 WordPress テーマTop 30 詳細

WordPress ログイン/ログアウトした後、特定のページに移動する

Last Updated:2022年5月3日| | 2のコメント

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というプラグインを使用すると、ログインおよびログアウト時にユーザー別、権限ごとにページを指定することができます。

WordPress ログインリダイレクトプラグイン

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

リダイレクトさせる様々な方法があります。 通常は、簡単な関数のコードで動作するが、場合によってはテーマに沿って、あるいはインストールされたプラグインとの衝突などで正常に動作しない場合があります。 さまざまな方法でテストして、使用中の環境とよく合う方法を見つけてください。

参照:

メモ:


2のコメント

コメント

?