अलग-अलग भूमिकाओं के लिए पंजीकरण और लॉगिन करें


17

मैंने "सदस्य" प्लगइन - "विक्रेता" और "खरीदारों" का उपयोग करके अपनी साइट के लिए 2 नई भूमिकाएँ निर्धारित की हैं।

प्रत्येक भूमिका का अपना पंजीकरण पृष्ठ और लॉगिन होना चाहिए। एक आगंतुक एक खरीदार और एक विक्रेता दोनों के रूप में पंजीकरण कर सकता है लेकिन वह केवल उनमें से एक के रूप में लॉग इन किया जा सकता है। इसलिए, यदि कोई आगंतुक विक्रेता के रूप में लॉग इन करता है और फिर खरीदार पृष्ठ पर जाता है, तो वह खरीदार के रूप में लॉगिन करने में सक्षम होगा और जब वह ऐसा करेगा तो वह स्वतः विक्रेता के रूप में लॉग आउट हो जाएगा।

मैंने एक प्लगइन के लिए घंटों खोज की है जो मुझे ऐसा करने का विकल्प देगा लेकिन एक नहीं मिल सका। विभिन्न भूमिका पंजीकरण वाली वेबसाइटों में एक बहुत ही सामान्य कॉन्फ़िगरेशन की तरह लगता है।

क्या इस तरह एक प्लगइन भी मौजूद है? और यदि नहीं तो यह कैसे किया जा सकता है?


1
आपको अलग-अलग रूपों की आवश्यकता नहीं है, भूमिका के चयन के साधन के साथ सिर्फ एक ही रजिस्टर फॉर्म। एक बार जब वे एक भूमिका में पंजीकृत हो जाते हैं, तो हर कोई उसी लॉगिन पृष्ठ का उपयोग कर सकता है। यदि कोई खरीदार के रूप में पंजीकरण करता है, तो कोई तरीका नहीं है कि वे अपने क्रेडेंशियल्स के साथ खरीदार के रूप में कुछ भी लॉग इन कर सकें। शायद कुछ इस तरह सही दिशा में इंगित करेंगे।
मिलो

आप इस लिंक का उपयोग कर सकते हैं wordpress.stackexchange.com/questions/237248/…
चार्ल्स जेवियर

जवाबों:


17

विभिन्न भूमिकाओं के लिए दो अलग पंजीकरण बनाना आसान है:

//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उदाहरण के लिए हुक का उपयोग कर सकते हैं :

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

शुक्रिया बैनेटर्न और मिलो! हां, मेरा मतलब है कि आगंतुक दो बार रजिस्टर करेगा - एक बार विक्रेता के रूप में और दूसरा खरीदार के रूप में, विभिन्न ईमेल के साथ। लेकिन मुझे दो अलग-अलग पंजीकरण प्रपत्रों की आवश्यकता है क्योंकि उनमें से प्रत्येक में अलग-अलग क्षेत्र होंगे। उदाहरण के लिए: विक्रेता के reg फॉर्म में फ़ील्ड शामिल होंगे - "व्यवसाय का नाम" और "व्यवसाय का पता" जबकि खरीदार के reg फॉर्म में फ़ील्ड "खरीदार का नाम" शामिल होगा। इसलिए, Bainternet, मुझे यकीन नहीं है कि मैं आपके कोड का उपयोग कर सकता हूं, क्योंकि यह (प्रयास के लिए बहुत बहुत धन्यवाद) क्योंकि यह एक ही पृष्ठ पर विभिन्न मापदंडों के साथ इंगित करता है। मैं इसे दो अलग-अलग रूपों में कैसे कर सकता हूं?
ऐश

@Ash: आपको अभी भी दो अलग-अलग रूपों की आवश्यकता नहीं है, केवल भूमिका के आधार पर फ़ील्ड जोड़ें, मैं एक उदाहरण के साथ अपना उत्तर अपडेट करूंगा।
बैनेटर्न

@Ash: उत्तर में अद्यतन की जाँच करें।
बैनेटर्न

@Bainternet, अतिरिक्त कोड के लिए बहुत बहुत धन्यवाद!
ऐश

@Bainternet: नौसिखिया प्रश्न के लिए क्षमा करें, लेकिन मैं जो हूं :-) - क्या यह कोड केवल एक प्लगइन में प्रयोग करने योग्य है या इसे एक php फ़ाइल में भी उपयोग किया जा सकता है जो एक पृष्ठ के लिए एक टेम्पलेट है?
ऐश
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.