การสร้างการลงทะเบียนสองครั้งแยกกันสำหรับบทบาทที่แตกต่างนั้นเป็นเรื่องง่าย:
//create a hidden field for role
add_action('register_form','add_hidden_role_field');
function add_hidden_role_field(){
if (isset($_GET['role'])){
echo '<input id="user_email" type="hidden" tabindex="20" size="25" value="'.$_GET['role'].'" name="role"/>';
}
}
add_action('user_register', 'update_role');
//save the the role
function update_role($user_id, $password="", $meta=array()) {
if (isset($_POST['role'])){
$userdata = array();
$userdata['ID'] = $user_id;
$userdata['role'] = $_POST['role'];
//only allow if user role is my_role to avoid a few new admins to the site
if (($userdata['role'] == "seller") or ($userdata['role'] == "buyer")){
wp_update_user($userdata);
}
}
}
และตอนนี้คุณสามารถเชื่อมโยงแต่ละบทบาทกับแบบฟอร์มการลงทะเบียน "ของตัวเอง":
seller: http://example.com/wp-login.php?action=register&role=seller
buyer: http://example.com/wp-login.php?action=register&role=buyer
แต่ดังที่ไมโลให้ความเห็น:
"ถ้ามีคนลงทะเบียนในฐานะผู้ซื้อไม่มีวิธีใดที่พวกเขาจะสามารถลงชื่อเข้าใช้เป็นอะไรก็ได้ยกเว้นผู้ซื้อที่มีข้อมูลประจำตัวของพวกเขา"
ซึ่งหมายความว่าพวกเขาจะต้องใช้อีเมลอื่นเพื่อลงทะเบียนบทบาทอื่น
ปรับปรุง
นี่คือการอัปเดตพร้อมตัวอย่างเพื่อแสดงวิธีที่คุณสามารถใช้หน้าเดียวกัน แต่มีฟิลด์ต่าง ๆ สำหรับแต่ละบทบาท
ดังนั้นคุณต้องเปลี่ยนฟังก์ชั่นเล็กน้อย:
//create a hidden field for role and extra fields needed
add_action('register_form','add_hidden_role_field');
function add_hidden_role_field(){
if (isset($_GET['role'])){
$user_type = $_GET['role'];
echo '<input id="user_email" type="hidden" tabindex="20" size="25" value="'.$_GET['role'].'" name="role"/>';
}
if (isset($user_type) && $user_type == "seller"){
//add extra seller fields here eg:
?>
business name:
<input id="user_email" type="text" tabindex="20" size="25" value="" name="business_name"/>
business address:
<input id="user_email" type="text" tabindex="20" size="25" value="" name="business_address"/>
<?php
}
if (isset($user_type) && $user_type == "buyer"){
//add extra buyer fields here eg:
?>
buyer name:
<input id="user_email" type="text" tabindex="20" size="25" value="" name="buyer_name"/>
<?php
}
}
วิธีนี้จะแสดงเฉพาะฟิลด์ที่จำเป็นสำหรับบทบาทที่ระบุ
ถัดไปคือถ้าคุณต้องการให้มีการตรวจสอบบางอย่างกับเขตข้อมูลพิเศษเหล่านี้คุณสามารถใช้register_post
hook ตัวอย่างเช่น:
add_action('register_post','my_user_fields_validation',10,3);
function my_user_fields_validation($login, $email, $errors) {
global $firstname, $lastname;
//get the role to check
if (isset($_POST['role'])){
$user_type = $_POST['role'];
}
//check the fields according to the role
if (isset($user_type) && $user_type == "seller"){
//check sellers fields
if ($_POST['business_name'] == '') {
$errors->add('empty_business_name', "<strong>ERROR</strong>: Please Enter in a Business name");
}
if ($_POST['business_address'] == '') {
$errors->add('empty_business_address', "<strong>ERROR</strong>: Please Enter in Business address");
}
}
if (isset($user_type) && $user_type == "buyer"){
//check buyers fields
if ($_POST['buyer_name'] == '') {
$errors->add('empty_buyer_name', "<strong>ERROR</strong>: Please Enter in a Buyer name");
}
}
}
ถ้าทุกอย่างเรียบร้อยดีให้บันทึกเขตข้อมูลในเมตาของผู้ใช้ตามบทบาท
add_action('user_register', 'update_role');
//save the role
function update_role($user_id, $password="", $meta=array()) {
if (isset($_POST['role'])){
$userdata = array();
$userdata['ID'] = $user_id;
$userdata['role'] = $_POST['role'];
$user_type = $_POST['role'];
//only allow if user role is my_role to avoid a few new admins to the site
if (($userdata['role'] == "seller") or ($userdata['role'] == "buyer")){
wp_update_user($userdata);
}
if (isset($user_type) && $user_type == "seller"){
//save sellers fields
update_user_meta($user_id, 'business_name', $_POST['business_name']);
update_user_meta($user_id, 'business_address', $_POST['business_address']);
}
if (isset($user_type) && $user_type == "buyer"){
//save sellers fields
update_user_meta($user_id, 'buyer_name', $_POST['buyer_name']);
}
}
}