それぞれのサービスで認証を許可するとWordPress側で
・ユーザーの作成
・ユーザーが作成済みならばログイン
の機能を実装してくれます。
現在WordPressを使用して会員機能を持ったWebサービスを制作しています。
その際に使用したプラグインやTipsを機能別にまとめておきたいと思います。
※そのサービスは来月ぐらいに公開できる予定です。
まずは会員登録機能をどのように実装するか。会員制サービスの第一歩にして一番めんどくさい部分です。
自力でコードを書いたこともありましたが、プラグインを使用するのが一番手っ取り早く確実でした。
AD
・ユーザーの作成
・ユーザーが作成済みならばログイン
の機能を実装してくれます。
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で何か持たせて渡すなどの方法が無難だと思います。
次回は管理画面を使わず記事を投稿させる方法について書きたいと思います。
AD
Commentsコメント