つながるnet

登録時に「ブログ上の表示名」(display_name)も自動設定する

Theme My Login 登録フォーム(準備編)」のページのフォームからご質問をいただきましたので記事にしました。

ご質問内容は

新規ユーザー登録時に追加した項目で「ブログ上の表示名」も自動的に設定してしまいたい

というものでした。

何度かのやり取りで最終的に次のように提案させていただきました。

  • 既存の$userdatalast_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)も設定できるようですね。(動作確認済み)
つまり、ユーザー登録時にそのパスワードを固定(もしくは任意)に設定できるということです。

直接メールしてみる

お名前 (必須)
メールアドレス (必須)
件名
ご相談内容
画像文字をご入力ください
captcha

コメントを残す