この記事は最後に更新してから1年以上経過しています。

ログアウト後はいつもサイトトップ

説明

ログアウト後に表示(リダイレクト)されるページは、標準ではログインページ(wp-login.php)である。4.2.0ではログアウト処理後のページリダイレクト前に呼び出されるフィルターが追加された。

wp_logout_url関数のおさらい

ログインページには、ログイン機能のほかにログアウト機能やパスワード変更機能などの機能を備えている。各機能はactionパラメータによって切り替わる仕組みで、ログアウト機能を行う場合のURLはwp_logout_url関数で取得できる。

echo wp_logout_url();

// 出力結果
http://localhost/wp-login.php?action=logout&_wpnonce=94161863f5

// リンクをクリックした後(ログアウト後)のURL
http://localhost/wp-login.php?loggedout=true

上記の出力結果はホストのドメインがlocalhostで、WordPressをドキュメントルートディレクトリにインストールした場合。actionパラメータの他にnonceパラメータが付与されていることがわかる。

次にwp_logout_url関数のパラメータとしてサイトトップ('/')を指定してみる。

echo wp_logout_url( '/' );

// 出力結果
http://localhost/wp-login.php?action=logout&redirect_to=%2F&_wpnonce=94161863f5

// リンクをクリックした後(ログアウト後)のURL
http://localhost/

出力結果のredirect_toパラメータの値がwp_logout_url関数のパラメータで指定した'/'をURLエンコードした内容となっている。

フィルターを使ってログアウト後のURLを変更する

さて、テーマのテンプレートにログアウト用のリンクを埋め込むのであればwp_logout_url関数のパラメータにログアウト後のURLを指定すればよいのだが、「ツールバー(admin ber)」のログアウトメニューのようなリンクを変更する場合はwp_logout_url関数内の'logout_url'フィルターを利用することになる。

add_filter( 'logout_url', 'my_logout_url', 10, 2 );
function my_logout_url( $logout_url, $redirect ) {
	if ( empty( $redirect ) )
		$logout_url = add_query_arg( array( 'redirect_to'=>urlencode( '/' ) ), $logout_url );
	return $logout_url;
}

このフィルターの返り値はログアウト後に表示するページのURLになり、変更しない場合は$logout_urlをそのまま返す。この例では、wp_logout_url関数のパラメータがない場合のみ、 add_query_arg関数を使ってURLにredirect_toパラメータを追加している。

もう1つの方法は、4.2.0で追加された'logout_redirect'フィルターを利用することである。このフィルターは、ログアウト処理の後に対象ページにリダイレクトする直前に呼び出され、パラメータにログアウトしたユーザ情報が含まれている。

add_filter( 'logout_redirect', 'my_logout_redirect', 10, 3 );
function my_logout_redirect( $redirect_to, $requested_redirect_to, $user ) {
	if ( !( isset( $user ) && $user instanceof WP_User && $user->has_cap( 'edit_posts' ) ) )
		$redirect_to = '/';
	return $redirect_to;
}

このフィルターの返り値がリダイレクトするページのURLになり、変更しない場合は$redirect_toをそのまま返す。上記ではパラメータ$userを使って編集者および管理者以外('edit_posts'を持っていない)ユーザか調べ、それらのユーザの場合のみログアウト後のページをサイトトップに変更している。

どちらのフィルターでも基本的にはログアウト後に指定したページを表示させることはできるが、'logout_redirect'フィルターならログアウト処理後に確実にURLを書き換えられる。またログアウト履歴を保存する場合にも利用できるだろう。


最終更新 : 2018年05月27日 10:45


お勧め

add_shortcode(2018年5月27日 更新)

void add_shortcode( string $tag, mixed $func )
ショートコード(独自タグ)を追加する。ショートコードは、投稿記事内でテキスト内容がない[tag]や、テキストを内包する[tag]テキスト[/tag]の書式で使用できる独自タグのこと。標準の状態では、 the_content関数によって表示する直前のフィルター処理内でパラメータ$funcで指定した関数・メソッドが実行される。

get_user_setting(2022年1月31日 更新)

mixed get_user_setting( string $name [ , string $default = false ] )
ユーザーインターフェイス設定を取得する。

have_posts(2018年5月27日 更新)

bool have_posts( )
次の投稿データが存在するかを調べる。

in_category(2018年5月27日 更新)

bool in_category( mixed $category [ , mixed $post = null ] )
投稿情報が指定したカテゴリーに属しているか調べる。

add_feed(2024年6月24日 更新)

string add_feed( string $feedname, callable $callback )
フィードを追加する。