「WP Members」未ログイン時のエラーメッセージの注意事項
今回は、かなりマニアックな内容です。もし、検索エンジンで調べて、このページにたどり着き、知りたかった内容だったならば検索エンジンすごいなと思います。
私自身忘れないよう備忘録として記載しておきます。
会員サイトを制作する際、自身でWordpressのユーザー管理をカスタマイズして制作しても良いのですが、より簡単に制作する方法としてプラグインを利用する方法があります。その中でも、有名なプラグインは「WP Members」かと思います。
「WP Members」では、会員専用ページに対して、未ログイン時のエラーメッセージを設定した内容に従って出力する事ができます。しかし、実装方法によっては、出力されなかったり、意図しない動作につながる事があります。今回は、その事例を紹介させて頂こうと思います。
1.「WP Members」未ログイン時のエラーメッセージの設定
「設定」 → 「WP-Members」
「ダイアログ」タブ→「アクセス制限された投稿記事および固定ページ、ログインおよび登録フォームの上に表示」
ここで設定した値が、会員専用ページで、未ログイン時の状況において出力されます。
2.今回起きた事象
各種制作したページを呼び出す自作のショートコードを使い、ページの中からオリジナルのページを呼び出そうとしました。具体的には以下のショートコードです。
■自作のショートコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | add_shortcode('insert','shortcode_insert'); function shortcode_insert($atts) { extract(shortcode_atts(array( 'page_id' => '', 'post_type' => '', 'slug_name' => '', ), $atts)); if(empty($page_id)&&empty($slug_name)){ return ''; } /* get page_id by slug_name */ if(!empty($slug_name)){ $get_page_id = get_page_by_path($slug_name, "OBJECT", $post_type); $page_id = $get_page_id->ID; } $content = get_page($page_id); $rtn = $content->post_content; return apply_filters('the_content', $rtn); } |
本ショートコードを使って、ページ内で、[insert post_type=’page’ slug_name=’voice’]を使い、スラッグ名がvoiceの固定ページを呼び出そうとしたが、本ショートコード内の最後の「return apply_filters(‘the_content’, $rtn);」の処理で、WP Membersの処理が呼び出され、未ログイン時のエラーメッセージが表示されてしまい、挿入してほしかったページが出力されませんでした。
そのため、最終的には本ショートコードを使わずページの内容を直接記載し対処しました。
3.考察
WP Membersの未ログイン時のエラーメッセージの出力は、フィルターフックでthe_contentが呼びされたときに動作し、ログイン済みか未ログインかを判断していると思われる。そのため、エディター(editor)(※1)がないページなどでは、設定したエラーメッセージが出力されない事象も発生する。
※1 例)register_post_typeでカスタム投稿を追加したような場合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $ret = register_post_type('test', array( 'labels' => array( 'name' => 'テスト', 'singular_name' => 'テスト', 'add_new_item' => 'テストの新規追加', 'edit_item' => 'テストの編集' ), 'public' => true, 'rewrite' => true, 'menu_position' => 5, 'has_archive' => true, 'supports' => array('title', 'thumbnail') )); |
‘supports’ => array(‘title”, ‘thumbnail’)を見るとわかる通り、’editor'(本文)がない。
「WP_Members」プラグインからすると、フィルターフックの’the_content’が呼び出されないため(エディター画面がない)、ログイン済みか未ログインかを判断する処理が呼び出されず、本投稿ページが会員用ページだとしても、エラーメッセージを出力する事ができない。
一方、独自に追加したショートコード[insert post_type=’page’ slug_name=’voice’]の方は、本来は、ログイン済みか未ログインかどうかに関わらず、指定されたページを出力するショートコードであるが、フィルターフックでthe_contentにフックをかけて処理を実行しているため、WP Membersのthe_contentにフックをかけている処理(ログイン済みか未ログインかを判断する処理)も呼び出され、未ログインであった場合のエラーメッセージが出力されてしまっていた。
4.まとめ
WP Members プラグインの処理は、ログイン済みか未ログインかの確認処理を、フィルターフックで追加されたthe_contentにフックをかけて実行しているため、注意が必要です。
先の内容でもあった通り、別のページを呼び出すのにthe_contentにフックをかけて実行する場合は、意図しないWP Membersのログイン済みか未ログインかを判断する処理が呼び出されてしまうため、本フックは使わずに直接、HTML文で記載した方が良い。
また、会員ページのカスタム投稿で、editorがない場合には、WP Membersのログイン済みか未ログインかを判断する処理が呼び出されないため、自身で、ログイン済みか未ログインかを、Wordpressの関数「is_user_logged_in()」を使って確認し処理を分岐させる必要があります。
以上
WEB DESIGN全てお任せ!ホームページ制作
RishunTradingでは、日本にはないコンセプトや高いデザイン性をもったヨーロッパ製品の輸入販売、及び、Webサイト制作事業などをおこなっております。
「全てお任せ!ホームページ制作」は、ドメイン取得からサーバー設定、レスポンシブルデザイン(スマホ、タブレット対応)、SEO対策がすべて含まれたお得なホームページを制作するサービス商品です。
運用開始後に「Webサイト運用管理サービス(保守)」と組み合わせて購入しますと、メンテナンス、更新も含めてすべて弊社で実施しますので、お客様は安心して本業に集中する事ができます。
しかもなんと、「全てお任せ!ホームページ制作」は、¥100,000!で提供しております。
本業が忙しい中小企業様に大変ご好評を頂いている商品です。
独自ドメイン取得
サーバー開設&設定
レイアウト設計
レスポンシブルデザイン
(*1)検索エンジン最適化
(SEO対策)場所Maps
お問い合わせフォーム
SSL化
各種SNS連携
運用マニュアル