WordPressでプラグインを使って会員制サイトを作るニーズは多いと思います。その為のプラグインも多くありますが、かゆい所に手が届かない場合もあります。今回はひと工夫をしてみました。
「WP-Members」プラグインとは?
「WP-Members」プラグインは、Wordpressで会員制サイトを作るプラグインの1つ。Wordpressで会員制サイトを作れるプラグインはいくつかあります。今回は「WP-members」プラグインを使った少し変わった仕組みを構築してみます。
やりたい事
今回やりたい事の内容は以下です。
- 「WP-Members」プラグイン機能をそのままつかう
- 会員限定記事は「会員専用ページ」の投稿とする
- 通常の「投稿」は非会員と会員のどちらでも見れる
- 「会員専用ページ」の投稿を見る時は、会員自身で作ったパスワードでログインする
- 会員登録は指定企業(ドメイン)のアドレスのみ受けつける
WP-Membersを使った会員サイトは自由度があるので設定し易いのですが、会員プランが「企業単位」の場合、新入社員や退職者に合わせて、WEBサイトの管理者が会員の状態を管理する必要があり手間が多くなります。
今回の方法では「会員になれるメールアドレスの有無で管理できる=メールアドレスを管理する担当に会員管理をゆだねられる」ので、WEB側の管理が楽になります。
指定ドメインのみ会員登録できる様にする
設定方法
function.phpにコードを追加する事で対応できます。プログラマーでは無いと抵抗あるかもしれませんが、コードは短いのでご安心を。
カスタム投稿タイプをONにする
会員と非会員のみれる投稿を分けるので、WP-Membersのプラグインにある「カスタム投稿タイプ」にチェックを入れます。(カスタム投稿タイプはデフォルトではOFFになっています)
会員登録フォームの設置
WP-Membersのショートコードを使えば簡単に設定する事ができます。
以下ショートコード一覧です。他にもあると思いますが、今回は基本的なものだけ使用します。
コード一覧
- [wpmem_form register]
ユーザー登録フォームを表示します。 - [wpmem_form login]
ログインフォームを表示します。 - [wpmem_form user_edit]
ユーザーが自分のプロファイル情報を編集するためのフォームを表示します。 - [wpmem_form password]
パスワード変更フォームを表示します。 - [wpmem_form forgot_username]
ユーザー名を忘れた場合にユーザー名をリクエストするフォームを表示します。 - [wpmem_logged_in]
ユーザーがログインしている場合にコンテンツを表示します。このショートコードは、コンテンツを制限するために使用されます。
条件付表示
- [wpmem_logged_in]…[/wpmem_logged_in]
ユーザーがログインしている場合にのみ、囲まれたコンテンツを表示します。 - [wpmem_logged_out]…[/wpmem_logged_out]
ユーザーがログアウトしている場合にのみ、囲まれたコンテンツを表示します。
投稿の設定を行う
「カスタム投稿タイプ」にチェックを入れると、コンテンツメニューの制限設定に「会員専用ページ」のチェックが出るので、設定します。
ここでコンテンツの設定ができれば、非会員の人が会員専用ページに行った時にログインフォームが出てきます。
非会員で且つログインを発行したい場合、登録フォームへのリンクも出るようになります。
会員登録フォームの登録項目(名前やメールアドレス等)やメッセージは、上部のタブで切り替えて指定してください。デフォルトは「英語」になっているので日本語に直して置いた方が良いかと思います。
会員専用ページのスラッグを取得
会員専用ページに設定するスラッグを確認します。Wordpressのメニューに「カスタム投稿タイプ設定」「会員専用ページ」を選択します。デフォルトは「member」になっているので、好きな名称に変更できます。
この「member」が会員専用ページの「スラッグ」になります。
function.phpにコードを追記
以下のコードを追記します。
許可するドメインのリストの部分に会員登録できるドメインを記載します。複数設定したい時はカンマ(,)で続けて入力します。
add_action( 'wpmem_pre_register_data', 'domain_email_reg_not_permitted' );
function domain_email_reg_not_permitted( $fields ) {
global $wpmem_themsg;
$allowed_domains = array( 'example.net', 'example.com', 'example.co.jp' ); // 許可するドメインのリスト
$email_pieces = explode( "@", $fields['user_email'] );
$email_domain = $email_pieces[1];
if ( !in_array( $email_domain, $allowed_domains ) ) {
$wpmem_themsg = '登録を許可されていないドメインのメールアドレスです。';
}
return;
}
設定完了
これで、目的の動作で動く形になります。実際の動きは以下のような感じです。
おまけ
スラッグが分からない場合はfunction.phpに以下のコードを入れる事で「カスタム投稿タイプ」の情報を管理画面で取得できます。
add_action('admin_notices', 'list_custom_post_types');
function list_custom_post_types() {
$post_types = get_post_types(array('_builtin' => false), 'objects');
echo '<div class="notice notice-info is-dismissible"><p>カスタム投稿タイプ一覧:</p><ul>';
foreach ($post_types as $post_type) {
echo '<li>' . $post_type->label . ' - スラッグ: ' . $post_type->name . '</li>';
}
echo '</ul></div>';
}
以下の様にWP-Members以外も全てのスラッグを表示してくれます。
(右上隅の✕で消せますがリロードすると再表示されます)
その他、会員サイトが作れるプラグイン
会員サイトを作れるプラグインは多くあります。以下の3つもGoogle検索で使い方を紹介されている件数も多いので使いやすそうです。
最後に
プラグインは便利ですが、たまに機能が「あと一歩」と思う部分も多々ありますが、ちょっとしたカスタマイズを行う事で出来る場合が多いので、ひと工夫する前提でやりたい事が100%できるプラグインを探さないで、余計な設定が少なくシンプルな内容になっているものを探すようにすると思った以上に楽です。
多くのプラグインを入れているサイトでは、コードを独自に追加してしまうと別な個所でエラーになったりもしますのでご注意ください。