WordPressプラグイン「WP-Members」で会員ページ作成方法の備忘録
写真はイメージ(なんの??)
WordPressで会員ページがあるサイト制作をする機会が増えてきました。
面倒くさいので今まで避けていたのですが、お仕事上避けられなくなってきたので、WordPressで会員ページを作成できる有名プラグイン「WP-members」に手を出してみました。
まだ簡単にしかイジってないけど、WP-membersの特徴は以下の通りかなって。
- 固定ページや投稿の個別ページにパスワードロックを掛けるのは簡単。
- カスタム投稿の個別ページにも簡単にロックを掛けれる。
- でも、各種一覧ページ(archive、category、taxonomy)はパスワード保護できない(対策は後記)
って、今のところ感じております。
で、対策が必要だと思った部分が、
- 各種一覧ページへのパスワード保護
- ログイン後のページ遷移
- ログアウトボタンの設置
ですかねー。
アーカイブにパスワード保護を掛ける方法
function un_logged_in_user_redirect() {
if( ! is_user_logged_in() && is_post_type_archive('カスタム投稿スラッグ') ) {
wp_redirect( '/login/' ); // ログインフォームURL
exit();
}
}
add_action( 'template_redirect','un_logged_in_user_redirect');
これはカスタム投稿「members」のアーカイブページにパスワード保護を掛ける記述。
これをfunctions.phpに上記コードを記述すればOK。
多分、通常の投稿だったらスラッグを「post」に、カテゴリーだったら分岐条件を「is_category」、タクソノミーだったら「is_tax」とかにすれば良いんじゃないかなー。
試してないからわからんけど。
ログイン後に任意のページに移動させる方法
function my_login_redirect($redirect_to, $user_id)
{
return home_url('/members/');
}
add_filter('wpmem_login_redirect', 'my_login_redirect', 10, 2);
この例だと、ログイン処理が行われると「/members/」ってスラッグのページに移動します。
「wpmem_login_redirect」この関数はプラグインを通じてログインが行われた場合って意味らしく、普通にWPにログインするとダッシュボードが表示されました。
ログアウトボタンを任意の位置に設置する方法
<div class="logout_buttom">
<a href="<a href="<?php echo wp_logout_url('/logout/') ?>">ログアウト</a>
</div>
このコードをテンプレートに貼ればそこにログアウトボタンが表示されます。
ログアウト後は「home_url」に飛びます。
まだそんなに弄ってないから、もっとあーしたいこーしたいって出てくるかもしれないけど、シンプルなパスワード保護コンテンツを作成したい場合はこれで事足りるんじゃないかなー。
ログイン状態による条件分岐
特定のカテゴリ(ターム)の一覧だけにパスワード掛けたい場合とか、パスワード保護コンテンツを対象としたサイト内検索の結果ページ(search.php)だけにパスワード保護を掛けたいとかの場合は、ログインしているかどーかの条件分岐で対応するのもありかもしれない。
例えば、対象のコンテンツだけテンプレートを分けて、そのテンプレートのループ部分に、
<?php if(!is_user_logged_in()): // ログインしていない場合 ?>
ログインフォームを表示させるか、ログインページへのリンクを設置
<?php else: // その他(ログインしている)場合 ?>
ログインユーザーへのコンテンツを表示させる
<?php endif; ?>
こんな感じで。
ログイン失敗のエラーメッセージ変更
function my_login_failed_args() {
$args = array(
'message' => 'ログインに失敗しました。',
);
return $args;
}
add_filter( 'wpmem_login_failed_args', 'my_login_failed_args' );
ログイン失敗時のエラーメッセージがイマイチなので変更。
ユーザー名が不明な場合はメールアドレスを入力って言われても、購読者ユーザーは「???」だろうから、ログインに失敗したよって教えてあげるだけに。
このコードをfunctions.phpに記述。
パスワード保護プラグインは他にもいろいろあるから何が良いかは正直わからん。
クライアントの要望に合わせていろいろ試すしかないんでないかね。
出来ないものは出来ないと言う勇気。
大事だと思います!