wake-up-neo.com

Separate Registrierung und Anmeldung für verschiedene Rollen

Ich habe 2 neue Rollen für meine Website mit dem Plugin "Mitglieder" festgelegt - "Verkäufer" und "Käufer".

Jede Rolle sollte eine eigene Registrierungsseite und ein eigenes Login haben. Ein Besucher kann sich sowohl als Käufer als auch als Verkäufer registrieren, er kann jedoch nur als einer von ihnen angemeldet sein. Wenn sich ein Besucher als Verkäufer angemeldet hat und dann auf die Käuferseite wechselt, kann er sich als Käufer anmelden. In diesem Fall wird er automatisch als Verkäufer abgemeldet.

Ich habe stundenlang nach einem Plugin gesucht, das mir die Möglichkeit gibt, dies zu tun, aber kein Plugin gefunden. Klingt nach einer ziemlich häufigen Konfiguration auf Websites mit unterschiedlichen Rollenregistrierungen.

Gibt es überhaupt ein solches Plugin? Und wenn nicht, wie geht das?

17
Ash

Es ist einfach, zwei separate Registrierungen für verschiedene Rollen zu erstellen:

//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);
       }
   }
}

und jetzt können Sie jede Rolle mit einem "eigenen" Registrierungsformular verknüpfen:

seller: http://example.com/wp-login.php?action=register&role=seller
buyer: http://example.com/wp-login.php?action=register&role=buyer

aber wie Milo kommentierte:

"Wenn sich jemand als Käufer registriert, kann er sich nur mit seinen Zugangsdaten als Käufer anmelden."

dies bedeutet, dass sie eine andere E-Mail-Adresse verwenden müssten, um die andere Rolle zu registrieren.

Aktualisieren

dies ist ein Update mit einem Beispiel, in dem gezeigt wird, wie Sie denselben Vordergrund verwenden können, jedoch mit unterschiedlichen Feldern für jede Rolle.

Sie müssen also nur die Funktionen ein wenig ändern:

//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
    }
}

auf diese Weise werden nur die Felder angezeigt, die für die jeweilige Rolle erforderlich sind.

Als nächstes können Sie register_post hook verwenden, wenn Sie eine Art Validierung für diese zusätzlichen Felder wünschen:

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");
        }
    }
}

wenn alles in Ordnung ist, speichern Sie die Felder in der Benutzer-Meta basierend auf der Rolle

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']);
        }
   }
}
17
Bainternet