为不同的角色创建两个单独的注册很容易:
//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
但正如米洛所言:
“如果有人注册为买家,那么除了凭凭据登录外,他们无法以买家身份登录”
这意味着他们必须使用不同的电子邮件来注册另一个角色。
更新这是一个更新示例,说明如何为每个角色使用相同的fore,但字段不同。
因此,您只需稍微更改一下函数:
//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
挂钩,例如:
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\']);
}
}
}