WP-Members Membershipのwpmem_profile分岐の謎を解く

WP-Members Membershipのwpmem_profile分岐の謎を解く
Image by Gerd Altmann from Pixabay

2023.03.03(更新日:2023.03.03)

会員サイト作成時の代表格「WP-Memebers」だが、以前から疑問に思っていた部分があった。
それは「プロフィールページ」。
会員がログインした際に表示されるのは理解出来るのだが、ログインしてなくともプロフィールのテンプレートを使用して形成しているページもある。
カスタマイズの際どーしても分岐処理したかったのだが・・・と困った時の備忘録。

この記事は1年以上経過しています。内容的に古い場合があります。

プロフィールページの謎

素の状態で「wpmem_profile」を当てたページがどこで使われているかと言うと

  • プロフィールページ(ログイン後)
  • 登録情報の編集(ログイン後)
  • パスワードの変更(ログイン後)

プロフィールページ以外はURLにパラメータ付きで表示される。この辺は素直に理解出来る。
ではログインしていない状態でどこに使われるかと言うと

  • パスワードリセット(ログイン前)
  • ユーザー名の回復(ログイン前)

こちらも同じくURLにパラメータ付きで表示される。「ログイン後と同じテンプレなの?」とちょっと驚く。
ならば「パラメータで分岐すれば行けそう」と安易な考えで分岐処理してみた。

更新するとパラメータが消えた!

例えばパスワードを更新してみると、メッセージが表示されURLに付いていたパラメータが消える。
ログインしていない状態の場合はメール送信で後処理させるので、メッセージ表示のみでいいかもしれないが、ログイン状態で分岐する場合はパラメータを判断出来なくなる。

これ何が困ったかと言うと「プロフィールページ」のみに表示させる項目があるのだが、適切な分岐が出来ないと登録情報やパスワードの変更ページにまでその項目が出てしまうと言うこと。
ログイン前後は「is_user_logged_in」で判断出来るが・・・こうしてしばらく詰み状態に。

解決策

「多分検索すれば見つかるだろう」と安易な考えていたが、それらしいものは見つからなかった。
なんかで状態判断しているんだろうけど、時間をかける余裕もないので最終手段に。

やっぱりコードを見るのが手っ取り早い

格闘の末「includes」に「class-wp-members-shortcodes.php」を発見。
ここに書いてあるじゃんとひと安心。

/* 442L */
function user_profile( $atts, $content, $tag ) {

	global $wpmem, $wpmem_themsg;

	$pairs = array(
		'register'    => 'show',
		'redirect_to' => '',
	);

	・
	・
	・
//以下のswitch文で分岐
	if ( is_user_logged_in() ) {
		switch( $wpmem->action ) {
		case "edit":
			$content = $content . wpmem_register_form( 'edit' );
			break;
	・
	・
	・

グローバル値に入れていたのね。あー疲れた・・・

まとめ

会員サイト制作プラグインの代表格「WP-Members Membership」。
多分これからの案件でもお世話になると思うため、この仕組みは忘れずに覚えておこう。

しかし・・・周知の事実だったお恥ずかしい話でもある。