您可以使用用户会话或Cookie为用户设置所需角色,例如:
/**
* register_roles_with_cookies
*/
class register_roles_with_cookies
{
function __construct($args = array()){
//create a hidden field for role and extra fields needed
add_action(\'register_form\',array($this,\'add_hidden_role_field\'));
//validate
add_action(\'register_post\',array($this,\'my_user_fields_validation\'),10,3);
//save the role
add_action(\'user_register\', array($this,\'update_role\'));
}
public function setCookie($name,$val,$time = false){
if(false === $time)
$time = time() + (86400 * 7)); // 86400 = 1 day
setcookie($name,$val,$time);
}
public function getCookie($name){
if (isset($_COOKIE[$name]))
return $_COOKIE[$name];
return false;
}
public function add_hidden_role_field(){
$user_type = isset($_GET[\'role\'])? $_GET[\'role\'] : (($this->getCookie(\'user_role\'))? $this->getCookie(\'user_role\'): false);
if($user_type){
$this->setCookie(\'user_role\',$user_type);
echo \'<input id="user_role" type="hidden" tabindex="20" size="25" value="\'.$user_type.\'" 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
}
}
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");
}
}
}
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\']);
}
}
}
}
new register_roles_with_cookies();