【WordPress】会員サイト構築用プラグイン「Simple Membership」でログイン後にアクセス元URLにリダイレクトさせる方法

おはこんばんちは!
あけおめことよろ!
T.R.Imaginationの北野です。

輸出ビジネススクールのツール担当ですが、
オリジナルツールだけが守備範囲ではございません!

スクールの中で使ってるシステム周りも守備範囲!

久々にWordPressのコードに頭を痛めてやっと達成感味わったお話です。

輸出ビジネススクールのコンテンツサイトを、
生徒限定で見られるようにWordPressで作っています。

Simple Membershipというプラグイン
(WordPressのインストール済みプラグイン一覧だと「Simple WordPress Membership」と表示されている)
を使って、会員限定サイトを構築しています。

目次

問題点

構築段階で気になっていたことが2つ。

・ログインしなくてもタイトルは見られる。
・ログイン後にトップページに戻っちゃう。

コンテンツ(ノウハウ)が書かれているのは本文なので、
タイトルが見えるぐらいまぁ問題無いか。と思って放置していましたが、
別の運営メンバーから「検索に引っかかってますよ」と指摘を受けて、
こりゃイカンな。。と。
(検索に引っかからなくするのは別の問題ですが…)

あと、ユーザビリティ良くない(使いにくい)のがログイン後にトップページに戻っちゃうってところ。

生徒指導の中で
「このページに書いてあるから読んでみて!」と
コンテンツページのURLを貼ったりするんですが、
そのURLにアクセスして、
ログインしたらトップページに戻っちゃって、
コンテンツページにアクセスするには
もう一度URLをクリックするなどしないといけない
とても不便な状態でした。

いつか直さなきゃ…と思いつつ
半年以上この状態で運用しておりました。

何かことを起こすのに丁度良い年末年始。

重い腰を上げ、対策に動きました!

3時間かかりましたが、解決できました!

解決手順

きっと同じお悩みをお持ちの方もいると思うので、
解決できた方法をシェアします!

プラグインインストール

Simple Membership After Login Redirection」というSimple Membershipの機能を拡張するプラグインをインストールして有効化ください。

有効化だけしておけばOKです。
プラグインの設定は変更しなくても良いです。

(この記事書いてて知りましたが、Simple Membershipのアドオンプラグインめっちゃありますね!)

WordPressのバージョン確認

この追加したプラグインにWordPress 5.3以上じゃないと動かない機能が含まれてますので、WordPressはVer.5.3以上にしておいてください。

functionsにコード追加

functions.phpに次のコードを記述します。

add_action( 'wp_head', 'add_login_to_head',1);
 function add_login_to_head() {
     if (SwpmMemberUtils::is_member_logged_in()) {
     } else {
         if (strpos($_SERVER['REQUEST_URI'], '/membership-login/') !== false) {
         } else {
             wp_redirect("/membership-login/?swpm_redirect_to=".$_SERVER['REQUEST_URI']);
             exit;
         }
     }
 }

コード解説

WordPressのheaderを読み込む時に、ログイン状態を確認します。

この時のログイン状態のチェックに「is_user_logged_in()」を使っていて
「なんでじゃー!!」と苦労しました。

Simple Membershipのログイン状態の確認には「SwpmMemberUtils::is_member_logged_in()」を使いましょう!

ログインしていない場合は、ログインページにリダイレクトします。

ログインページのスラッグを変更している場合は、それに合わせてコードを書き換えてください。

アクセス元のURLをパラメータクエリに持たせます。

パラメータを持たせるための「swpm_redirect_to=」を使えるようにするために、Simple Membership After Login Redirectionをインストールしました。

これで、ログインしてない状態でコンテンツページにアクセスしても、ログインしてすぐに内容が表示されるようになります!

地味にモヤっとする
ログインしたらトップページに戻っちゃう問題も
タイトルだけとは言え中身が見えちゃう問題も
解決しました!

成功体験の喜びの勢いのまま
覚えている内にとこの記事を書いてますので、
コードの手直しをする余地はありますが、
これで解決はできます!

お役に立てば嬉しいです!


リダイレクト除外設定

-2020.04.13 追記-

この記事を参考にして下さった読者様からご質問をいただきましたので、追記にて回答させていただきます!

「ログインしなくても見られるページを残したい」

という趣旨のご質問でした!

これを受けて改良したわけではないのですが、
実際に僕が組んだコードは上記から少しカスタマイズしています。

こんな感じになってます。

//ログインしていない場合はログイン画面に遷移する
// head読み込み時にログインチェック
add_action( 'wp_head', 'add_login_to_head',1);
function add_login_to_head() {
	if (SwpmMemberUtils::is_member_logged_in()) {
			//ログインしてたら何もしない
	} else {
		//ログインしていない場合で、

		if (strpos($_SERVER['REQUEST_URI'], '/membership-login/') !== false) {
			//ログインページにアクセスしてる場合は何もしない
		} elseif (strpos($_SERVER['REQUEST_URI'], '/membership-join/membership-registration/') !== false) {
			//メンバー登録ページにアクセスしてる場合は何もしない
		} elseif (strpos($_SERVER['REQUEST_URI'], 'swpm') !== false) {
			//アクセスしたURLに「swpm」が含まれている場合は何もしない
		} else {
			// 上記以外の場合は戻りページをセットしてログインページにリダイレクト
			wp_redirect("/membership-login/?swpm_redirect_to=".$_SERVER['REQUEST_URI']);
			exit;
		}
	}
}

・メンバー登録ページの場合
・「swpm」が含まれている場合

といったように、特定のURLの場合にのみ、リダイレクトしないっていう設定を追加しています。

リダイレクトしたくないページのURLが少なければ個別に除外設定をすれば良いと思います。

リダイレクトしたいページが多いのであれば、
「ログインしていなくても見られるページ」のパーマリンクに共通の文字列を入れる。

もしくはその逆で「ログインしてないと見られないページ」のパーマリンクに共通の文字列を入れておく。

そうすると、リダイレクト除外の設定がしやすいかもしれないですね!