2023.01.14

WordPressでログアウト機能を独自に実装する方法

こんにちは、Webエンジニアのゾノ( @ozonosho )です。

今回の記事ではWordPressでログアウト機能を独自に実装する方法を紹介します。

会員制サイトを作る場合、会員向けにログイン機能やログアウト機能が必要になります。

WordPressに備わっているログアウト機能は画面上部に固定表示される管理ツールバーの機能ぐらいなので、お世辞にも一般ユーザー向けとは言えません。一般ユーザー向けに考えると、サイト上に分かりやすくログアウトボタンが設置してあるほうが親切でしょう。

▽こんな感じ

上記サイトではログイン中のユーザーにのみログアウトボタンが表示されます

尚、ログアウト機能を独自に実装すれば「ユーザーのプロフィールページに最終ログイン日時を表示する」「一定期間ログインしていないユーザー向けにケアメールを送る」など会員制サイトにとって必要となる機能の実現も可能になります。

ログアウト機能を独自に実装するメリット
  • 最終ログアウト日時を保存できる (例:ユーザーのプロフィールページに最終ログイン日時として表示する)
  • ログアウト後に任意のページに飛ばすことができる
  • ログアウト時の条件によって好きな処理を追加できる (例:ログイン中だけ保持していた絞り込み検索設定をリセットする)
  • 一定期間内にログインしているアクティブユーザーの数を集計する
  • 一定期間以上ログインしていないユーザーに任意のメールを送る

上記のように、ログアウト時に好きな処理を追加したり、会員制サイトに便利な機能を実現したりすることができます。

ログアウト機能を独自に実装する方法

WordPressでログアウトリンクを設置する場合、一般的にwp_logout_url関数を利用するケースが多いです。トークン付のログアウトURLが出力されるので安全にログアウトできます。

今回はもう少し柔軟なログアウト機能を実装するため、ログアウトリンクとログアウト処理どちらも自分で書いてみました。

ログアウトリンク

ログアウトリンクのパラメータには、処理判定のためのactionとCSRF対策のためのnonce値を加えます。

<a href="<?php echo wp_nonce_url(add_query_arg('action', 'do_logout'), 'do_logout', 'token'); ?>">ログアウト</a>

これで「{現在ページのURL}?action=do_logout&token={nonce値}」というURLを飛び先としたログアウトリンクができます。

ログアウト処理

ログアウトリンクが踏まれた後はログアウト処理をおこないます。
WordPressの場合はinitやwpといったフックが用意されているので、適切なタイミングで処理を挟みましょう。

functions.phpに記述する処理例を載せてみます。

<?php

add_action('wp', function() {

	if(isset($_GET['action']) && $_GET['action'] === 'do_logout') {
		do_logout();
	}

});

function do_logout() {

	//トークン認証
	if(!wp_verify_nonce($_GET['token'], 'do_logout')) {
		return;
	}

	if(is_user_logged_in()) {

		$user_id = get_current_user_id();

		//ログアウト
		wp_logout();

		//ログアウト日時をカスタムフィールドに保存
		update_user_meta($user_id, 'last_logout_time', wp_date('Y-m-d H:i:s'))

		//任意のページにリダイレクト
		wp_safe_redirect(home_url('/logout'));

		exit;

	}

}

?>

まずはCSRF対策としてトークン認証をおこないます。
その後は、ログアウトリンクを踏んだユーザーがログイン状態であればログアウトさせて、ログアウト日時をカスタムフィールドに保存しています。

上記コードのとおりWordPressには現在のユーザーをログアウトさせるwp_logout関数が用意されているので、この関数を利用するだけでユーザーをログアウト(+セッション情報を消去)させることができます。

ログアウト処理がひととおり完了したら、最後にリダイレクト処理で任意のページ(例:ログアウトページやトップページ)に飛ばしてあげましょう。

ここでは簡単な処理例のみ記載していますが、独自にログアウト機能を実装すれば好きなタイミングに好きな処理を追加することができるので大変便利です。会員制サイトを制作する際にはぜひお試しください。

おわりに

以上、今回の記事ではWordPressでログアウト機能を独自に実装する方法を紹介させていただきました。

当サイトではWordPressのカスタマイズ依頼を請け負っています。実現したい機能・要望がある方はぜひ下記ページよりご相談ください。

あなたのサイトに理想の機能を実装!WordPressカスタマイズサービス

本サービスはあなたのWordPressサイトに理想の機能を実装するサービスとなります。 どのような機能・要望でも実現可能です! Wo......

→この記事を読む