「Theme My Login 登録フォーム(準備編)」のページのフォームからご質問をいただきましたので記事にしました。
ご質問内容は
新規ユーザー登録時に追加した項目で「ブログ上の表示名」も自動的に設定してしまいたい
というものでした。
何度かのやり取りで最終的に次のように提案させていただきました。
- 既存の$userdataのlast_name、つまりプロフィールページにはあるが通常の登録項目にはないフィールド「姓(last_name)」を登録時に追加
- 追加項目の保存ロジックをfunctions.phpに記述し
- その保存と同時にその値でdisplay_nameを設定
ご質問はWordPressプラグインTheme My Loginの登録を拡張する趣旨でしたが、ここではプラグインを使わない登録の拡張方法を示します。ついでにバリデーションも含めてfunctions.phpに記述するコードは:
// 登録フォームに項目を追加(プロフィールページに存在する項目) function show_first_name_field() { ?> <p> <label>お名前<br/> <input id="last_name" type="text" size="25" value="<?php echo $_POST['last_name']; ?>" name="last_name" /> </label> </p> <?php } add_action('register_form','show_first_name_field'); // 登録時追加項目の入力チェック function check_fields ( $errors ) { if ( $_POST['last_name'] == '' ) { $errors->add( 'empty_last_name', "<strong>エラー</strong>: お名前を入力してください" ); } return $errors; } add_action('registration_errors','check_fields',10,3); // 登録時追加項目の保存、 // 同時に'last_name'を'display_name'にも自動設定 function tml_user_register( $user_id ) { if ( !empty( $_POST['last_name'] ) ) { // 'last_name'への入力有無を判定 // 'last_name'への入力値を取得 $last_name = $_POST['last_name']; // 'display_name'を'last_name'の値で自動設定 $args = array( 'ID' => $user_id, 'last_name' => $last_name, 'display_name' => $last_name ); wp_update_user( $args ); } } add_action('user_register', 'tml_user_register');
今回のご質問、「ブログ上の表示名」の設定は
40行目:wp_update_user()
がポイントです。
データベースのユーザー情報を更新する関数wp_update_user
詳しくはCodexをご覧いただきたいと思いますが、日本語Codexよりも英語Codexを見たほうが内容が分かりやすいかもしれません。
英語Codexに載せられているとおりですが、wp_update_userで設定可能な項目は次のとおりです。
user_pass user_login user_nicename user_url user_email display_name nickname first_name last_name description rich_editing user_registered role jabber aim yim show_admin_bar_front
パスワード(user_pass)も設定できるようですね。(動作確認済み)
つまり、ユーザー登録時にそのパスワードを固定(もしくは任意)に設定できるということです。