異なる役割の個別の登録とログイン


17

「Members」プラグインを使用して、サイトに2つの新しいロールを設定しました-「sellers」と「buyers」。

各ロールには、独自の登録ページとログインが必要です。訪問者は買い手と売り手の両方として登録できますが、ログインできるのはどちらか一方のみです。そのため、訪問者が売り手としてログインしてから買い手ページに移動した場合、買い手としてログインでき、ログインすると自動的に売り手としてログアウトされます。

これを行うオプションを提供するプラグインを何時間も探しましたが、見つけることができませんでした。異なるロール登録を持つWebサイトで非常に一般的な構成のように聞こえます。

このようなプラグインも存在しますか?そして、そうでない場合、どのようにこれを行うことができますか?


1
個別のフォームは必要ありません。役割を選択する手段を備えた単一の登録フォームのみが必要です。ロールに登録されると、誰もが同じログインページを使用できます。誰かがバイヤーとして登録した場合、資格情報を使用してバイヤー以外のユーザーとしてログインすることはできません。このような何かがあなたを正しい方向に向けるでしょう。
ミロ

あなたは、このリンクを使用することができますwordpress.stackexchange.com/questions/237248/...
チャールズ・エグゼビア

回答:


17

役割ごとに2つの個別の登録を作成するのは簡単です。

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

BainternetとMiloに感謝します!はい、訪問者は2回登録します。1回は売り手として、もう1回は買い手として、異なるメールで登録します。ただし、それぞれに異なるフィールドが含まれるため、2つの個別の登録フォームが必要です。たとえば、売り手のregフォームには「business name」と「business address」というフィールドが含まれ、買い手のregフォームには「buyer name」というフィールドが含まれます。だから、Bainternet、私はあなたのコードをそのまま使用できるかどうかはわかりません(しかし、努力に感謝します)。2つの別々のフォームでそれを行うにはどうすればよいですか?
アッシュ

@Ash:まだ2つの個別のフォームは必要ありません。役割に基づいてフィールドを追加するだけで、回答を例で更新します。
Bainternet

@Ash:回答の更新を確認します。
Bainternet

@Bainternet、追加のコードをありがとう!
アッシュ

@Bainternet:初心者の質問は申し訳ありませんが、それは私です:-)-このコードはプラグインでのみ使用できますか、ページのテンプレートであるphpファイルでも使用できますか?
アッシュ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.