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」を発見。
ここに書いてあるじゃんとひと安心。
function user_profile( $atts, $content, $tag ) {
global $wpmem, $wpmem_themsg;
$pairs = array(
'register' => 'show',
'redirect_to' => '',
);
・
・
・
if ( is_user_logged_in() ) {
switch( $wpmem->action ) {
case "edit":
$content = $content . wpmem_register_form( 'edit' );
break;
・
・
・
グローバル値に入れていたのね。あー疲れた・・・
まとめ
会員サイト制作プラグインの代表格「WP-Members Membership」。
多分これからの案件でもお世話になると思うため、この仕組みは忘れずに覚えておこう。
しかし・・・周知の事実だったお恥ずかしい話でもある。