それぞれのサービスで認証を許可するとWordPress側で
・ユーザーの作成
・ユーザーが作成済みならばログイン
の機能を実装してくれます。
現在WordPressを使用して会員機能を持ったWebサービスを制作しています。
その際に使用したプラグインやTipsを機能別にまとめておきたいと思います。
※そのサービスは来月ぐらいに公開できる予定です。
ADs
まずは会員登録機能をどのように実装するか。会員制サービスの第一歩にして一番めんどくさい部分です。
自力でコードを書いたこともありましたが、プラグインを使用するのが一番手っ取り早く確実でした。
・ユーザーの作成
・ユーザーが作成済みならばログイン
の機能を実装してくれます。
Theme My Loginを使用している場合、独自のログイン画面にCimy User Extra Fieldsを使用した拡張プロフィール項目も自動で表示されるので非常に便利です。
ユーザーを取得してコメント数の多いユーザーごとに表示するにはFeaturing CountCommentstプラグインを使用すると以下のコードで取得できます。コメント数ランキングのような感じで使えます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php $users = get_users(); foreach ($users as $user) { $user_name = $user->user_login; $user_id = $user->ID; global $featuring_countcomments; $params=array( 'query_type' => 'user_id', 'user_attribute' => $user_id, 'zero' => '0', 'one' => '1', 'more' => '%c' ); echo $user_name.' '; echo $featuring_countcomments->count_by_user($params) . '件<br />'; } ?> |
退会できないWebサービスというのはよく問題になりますので、退会時の処理についてはよく検討したほうがいいでしょう。
・退会した場合、過去のデータはどうするのか。
・即時退会させるのか
などの判断が問題になりやすいです。
簡易的に考えるならば、WordPressにおける退会処理は「ユーザーの削除」「投稿記事の削除」だと思います。これは以下のようなコードで実現できます。
HTML
1 2 3 4 5 6 7 8 9 10 11 |
<p> 退会しますか?<br /> 投稿記事はすべて削除されます。 </p> <form action="" method="post"> <?php $nonce= wp_create_nonce('my-nonce'); ?> <input type="hidden" name="_wpnonce" value="<?php echo $nonce; ?>" /> <input type="hidden" name="user_delete" value="1" /> <input type="submit" value="退会する" /> </form> |
上記HTMLで退会処理をさせるPHPに退会処理を行うフラグをPOSTします。
PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php $nonce=$_REQUEST['_wpnonce']; if($_POST["user_delete"] && wp_verify_nonce($nonce, 'my-nonce')){ require_once ABSPATH."/wp-admin/includes/user.php"; global $userdata; get_currentuserinfo(); $author = $userdata->ID; $delcomp = wp_delete_user($author); if($delcomp){ $_SESSION = array(); session_destroy(); echo '<p>削除処理が完了しました。</p>'; } else { echo '<p>削除処理中にエラーが発生しました。</p>'; } ?> |
上記ではユーザー削除と投稿記事削除を行いますが、wp_delete_user($author)の第2引数にユーザーIDを渡すと、投稿記事を指定ユーザーIDのユーザーに移すことができます。記事削除を行いたくない場合はダミーユーザーのIDを指定するといいでしょう。
申請があったものを素通しで会員にしたくない場合は、New User Approveというプラグインが便利です。承認するまでユーザー登録されない・・・というより、正確には「承認済み」や「承認待ち」というユーザーに対するメタデータを付加しています。
不動産ポータルサイトなどをイメージすると分かりやすいですが、エンドユーザーは自由に簡単に登録できますが不動産を掲載するユーザーは承認が必要、という場合は以下のようなコードに書き換えます。
プラグインを直接書き換えますのでご注意ください。
1 2 3 4 5 6 7 8 9 |
//330行目あたり //------------------------------------- if($hogehoge){ update_usermeta($user_id, 'pw_user_status', 'approved'); } else{ update_usermeta($user_id, 'pw_user_status', 'pending'); } |
$hogehogeで何を条件に承認待ち(pending)か承認済み(approved)を設定します。会員登録フォームでhiddenで何か持たせて渡すなどの方法が無難だと思います。
次回は管理画面を使わず記事を投稿させる方法について書きたいと思います。
ADs
こんにちわ、非常に参考になりました。
ありがとうございます。
1つだけお聞きしたいと思います。
会員になった際、マイページ(というか、自分だけしか見れない投稿記事やカテゴリに属する記事など)を作成する方法はありませんでしょうか?
管理者が作成した個人向けのコンテンツに対して、会員登録して、ログインされた方だけが表示されるようにしたいのです。
もちろん、他者には完全に非表示にしたいです。
是非、ご教授頂ければ幸いです。
よろしくお願い申し上げます。
kenji 様
コメントありがとうございます。
ログインユーザーだけに記事を表示させる場合、is_user_logged_in()という関数でログインしているか否かを判定できますので
if ( is_user_logged_in() ) {
echo ‘会員専用コンテンツです’;
the_content();
} else {
echo ‘この記事を見るためにはログインしてください’;
};
といったかたちで判定することが可能です。
詳しくはCodexに解説がありますので参考になるかと思います。
http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/is_user_logged_in
ご回答ありがとうございます。
ちょっと、私の説明不足でしたが、
管理人が投稿した個人宛(会員宛ではなく個人宛)の記事があり、
対象のユーザがログインした際、その投稿データのみを閲覧させたいです。
できれば、その画面を見たかどうかを、ユーザにチェックさせたいです。
要するに、Wordpressで、個人別の回覧板を作成するようなものでしょうか?
ポイントは、会員用のコンテンツの表示では無く、
会員の中のさらに、特定のユーザ向けに、特定のコンテンツ(複数の記事ページ)を表示させたいことなのです。
ちょっと特殊かも知れません。
是非、ご教授いただけると幸いです。
よろしくお願いいたします。
kenji 様
> 対象のユーザがログインした際、その投稿データのみを閲覧
この処理は、記事投稿時に「どのユーザー向けか」をカスタムフィールドで入力する(たとえば「userid」という名前のカスタムフィールドに見せたいユーザーのIDを入力する)
>その画面を見たかどうかを、ユーザにチェックさせたい
こちらも同様に、その記事を見たかどうかをカスタムフィールドに保持する。たとえば「read」というカスタムフィールドが「1」ならば既読と判定。
※ページ中にフォームを設置し、見た人がフォームを送信すれば既読である(つまりadd_post_metaでフロントエンドからカスタムフィールドを追加する)
という処理でどうでしょうか?
コードが長くなりましたので以下のページを参照してください。
http://codetter.com/?p=864
管理人様
種々のご教授、大変にありがとうございます。
明日、トライしてみます。
本当にありがとうございます。
取り急ぎ御礼まで
Pretty section of content. I just stumbled upon your blog and in accession capital to assert that I
get actually enjoyed account your blog posts.
Anyway I will be subscribing to your feeds and even I achievement you access consistently rapidly.