পৃথক পৃথক ভূমিকার জন্য নিবন্ধকরণ এবং লগইন করুন


17

আমি "সদস্য" প্লাগইন - "বিক্রেতা" এবং "ক্রেতাদের" ব্যবহার করে আমার সাইটের জন্য 2 টি নতুন ভূমিকা সেট করেছি।

প্রতিটি ভূমিকার নিজস্ব নিবন্ধকরণ পৃষ্ঠা এবং লগইন হওয়া উচিত। একজন দর্শনার্থী ক্রেতা এবং বিক্রেতা উভয়ই হিসাবে নিবন্ধন করতে পারেন তবে তিনি কেবল সেগুলির মধ্যে একটি হিসাবে লগ ইন করতে পারেন। সুতরাং, যদি কোনও দর্শক কোনও বিক্রেতা হিসাবে লগ ইন করে এবং তারপরে ক্রেতা পৃষ্ঠায় যায় তবে সে ক্রেতা হিসাবে লগইন করতে সক্ষম হবে এবং যখন সে তা করে তবে সে স্বয়ংক্রিয়ভাবে বিক্রেতা হিসাবে লগ আউট হয়ে যায়।

আমি এমন প্লাগিনের জন্য কয়েক ঘন্টা অনুসন্ধান করেছি যা আমাকে এটি করার বিকল্প দেবে তবে একটিও খুঁজে পেল না। বিভিন্ন রোল রেজিস্ট্রেশন সহ ওয়েবসাইটগুলিতে বেশ সাধারণ কনফিগারেশনের মতো মনে হচ্ছে।

এর মতো প্লাগইন কি উপস্থিত আছে? আর না হলে কীভাবে এটি করা যায়?


1
আপনার পৃথক ফর্মের দরকার নেই, ভূমিকা নির্বাচনের মাধ্যমের সাথে একটি একক নিবন্ধক ফর্ম। একবার তারা কোনও ভূমিকায় নিবন্ধিত হয়ে গেলে, সবাই একই লগইন পৃষ্ঠাটি ব্যবহার করতে পারে। যদি কেউ ক্রেতা হিসাবে নিবন্ধন করে তবে তাদের শংসাপত্রগুলি সহ ক্রেতা ছাড়া অন্য কোনও কিছুতে তারা লগ ইন করতে পারে না। সম্ভবত এর মতো কিছু আপনাকে সঠিক দিকে নির্দেশ করবে।
মিলো

উত্তর:


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

আপনাকে ধন্যবাদ বাইনারনেট ও মিলো! হ্যাঁ, আমি বলতে চাইছি যে দু'বার দর্শক দুবার নিবন্ধভুক্ত হবেন - একবার একজন বিক্রেতা হিসাবে এবং অন্য একজন ক্রেতা হিসাবে, বিভিন্ন ইমেল সহ। তবে আমার দুটি পৃথক রেজিস্ট্রেশন ফর্মের প্রয়োজন কারণ সেগুলির প্রতিটিতে আলাদা আলাদা ক্ষেত্র থাকবে। উদাহরণস্বরূপ: বিক্রেতার রেগ ফর্মের মধ্যে ক্ষেত্রগুলি - "ব্যবসায়ের নাম" এবং "ব্যবসায়ের ঠিকানা" অন্তর্ভুক্ত থাকবে যখন ক্রেতার রেগ ফর্মটিতে ক্ষেত্রটি "ক্রেতার নাম" অন্তর্ভুক্ত থাকবে। সুতরাং, বেন্টারনেট, আমি নিশ্চিত না যে আমি আপনার কোডটি যেমন ব্যবহার করেছি তেমন ব্যবহার করতে পারি (তবে প্রচেষ্টার জন্য অনেক ধন্যবাদ) যেহেতু এটি একই পৃষ্ঠাতে বিভিন্ন প্যারামিটারের সাথে নির্দেশ করে। আমি কীভাবে এটি দুটি পৃথক ফর্ম দিয়ে করতে পারি?
অ্যাশ

@ আশ: আপনার এখনও দুটি পৃথক ফর্মের দরকার নেই, কেবল ভূমিকার উপর ভিত্তি করে ক্ষেত্রগুলি যুক্ত করুন, আমি আমার উত্তরটি একটি উদাহরণ দিয়ে আপডেট করব।
বাইনারনেট

@ অ্যাশ: উত্তরে আপডেটটি দেখুন।
বেন্টারনেট

@ বেনারনেট, অতিরিক্ত কোডের জন্য অনেক ধন্যবাদ!
অ্যাশ

@ বেন্টারনেট: নবাগত প্রশ্নের জন্য দুঃখিত তবে আমি যা করছি :-) - এই কোডটি কি কেবল একটি প্লাগইনে ব্যবহারযোগ্য বা এটি কোনও পিএইচপি ফাইলেও ব্যবহার করা যেতে পারে যা কোনও পৃষ্ঠার টেম্পলেট?
অ্যাশ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.