WordPress 默認(rèn)的注冊表單只有“用戶名”和“電子郵件”這兩個(gè)字段,不少朋友希望注冊的時(shí)候,添加額外的字段,比如“名字”和“姓氏”等:

下面,倡萌就講解一下添加“名字”和“姓氏”這兩個(gè)字段的方法,將下面的代碼添加到主題的 functions.php 即可:
/**
* WordPress 注冊表單添加額外的字段
* http://www.ydqwiac.cn/require-additional-profile-fields-at-registration.html
*/
// 在注冊界面添加額外的表單
add_action( 'register_form', 'additional_profile_fields' );
function additional_profile_fields() { ?>
<p>
<label><?php _e('名字') ?><br />
<input type="text" name="first_name" id="first_name" class="input" size="25" tabindex="20" /></label>
</p>
<p>
<label><?php _e('姓氏') ?><br />
<input type="text" name="last_name" id="last_name" class="input" size="25" tabindex="20" /></label>
</p>
<?php }
// 檢測表單字段是否為空,如果為空顯示提示信息
add_action( 'register_post', 'add_register_field_validate_first_name', 10, 3 );
function add_register_field_validate_first_name( $sanitized_user_login, $user_email, $errors) {
if (!isset($_POST[ 'first_name' ]) || empty($_POST[ 'first_name' ])) {
return $errors->add( 'firstnameempty', '<strong>ERROR</strong>: 請輸入您的名字.' );
}
}
add_action( 'register_post', 'add_register_field_validate_last_name', 10, 3 );
function add_register_field_validate_last_name( $sanitized_user_login, $user_email, $errors) {
if (!isset($_POST[ 'last_name' ]) || empty($_POST[ 'last_name' ])) {
return $errors->add( 'lastnameempty', '<strong>ERROR</strong>: 請輸入您的姓氏.' );
}
}
// 將用戶填寫的字段內(nèi)容保存到數(shù)據(jù)庫中
add_action( 'user_register', 'insert_register_fields' );
function insert_register_fields( $user_id ) {
$first_name = apply_filters('pre_user_first_name', $_POST['first_name']);
$last_name = apply_filters('pre_user_last_name', $_POST['last_name']);
// 以下的 'first_name' 和 'last_name' 是“我的個(gè)人資料”中已有的字段
update_user_meta( $user_id, 'first_name', $first_name );
update_user_meta( $user_id, 'last_name', $last_name );
}
代碼分 3 部分組成:
1.在注冊界面添加額外的表單
2.檢測表單字段是否為空,如果為空顯示提示信息
3.將用戶填寫的字段內(nèi)容保存到數(shù)據(jù)庫中
需要注意的是,表單使用的是 update_user_meta() 函數(shù)來保存數(shù)據(jù),請確保第 2 個(gè)參數(shù)是已經(jīng)存在的。比如下面的 ‘first_name’ 和 ‘last_name’ 是已經(jīng)存在數(shù)據(jù)庫中的。
update_user_meta( $user_id, 'first_name', $first_name );
update_user_meta( $user_id, 'last_name', $last_name );
默認(rèn)情況下,WordPress個(gè)人資料的可用字段如下:
- user_login
- user_pass
- user_nicename
- user_email
- user_url
- user_registered
- user_activation_key
- user_status
- display_name
- nickname
- first_name
- last_name
- description
- jabber
- aim
- yim
- user_level
- user_firstname
- user_lastname
- user_description
- rich_editing
- comment_shortcuts
- admin_color
- plugins_per_page
- plugins_last_view
- ID
如果你想添加額外的字段到個(gè)人資料中,請參考:
刪除/添加/調(diào)用WordPress用戶個(gè)人資料的聯(lián)系信息
然后就可以根據(jù)上文的代碼示例添加字段到注冊表單。





請問,為什么添加的字段注冊表單提交后,不能保存到數(shù)據(jù)庫中,到后臺填寫更新資料才能保存
請注意檢查下字段的名稱是否一一對應(yīng)
這樣是保存到usermeta表里的,有沒有辦法保存到users表里?
比如注冊表單添加一個(gè)字段user_url,需要保存到users而不是usermeta
用戶的相關(guān)信息一般都是添加到usermeta,只有少數(shù)幾個(gè)字段才會添加到 users
前端用戶中心不是用了? ?
請問啊 這些字段怎么設(shè)置為非必填選項(xiàng)?因?yàn)槲以O(shè)置的有些字段不是必須要填的..但是現(xiàn)在情況是不填的話就通過不了貌似..
大學(xué)快一周年了吧
呵呵 這個(gè)可以有~
需要注意的是,表單使用的是 update_user_meta() 函數(shù)來保存數(shù)據(jù),請確保第 2 個(gè)參數(shù)是已經(jīng)存在的。比如下面的 ‘first_name’ 和 ‘last_name’ 是已經(jīng)存在數(shù)據(jù)庫中的。 這里的意思是 第二個(gè)參數(shù)要實(shí)現(xiàn)添加到數(shù)據(jù)庫中?那如何添加呢?
‘first_name’ 和 ‘last_name’ 是WP默認(rèn)就存在的個(gè)人資料字段,你可以在后臺“我的個(gè)人資料”中看到,所以才可以直接在注冊表單中使用它來保存用戶提交的信息。如果你要添加默認(rèn)沒有的其他字段,文章末尾已經(jīng)有參考文章了,自己看。
ok thx
好