다른 역할에 대한 별도의 등록 및 로그인


17

"판매"와 "구매자"- 나는 "회원"플러그인을 사용하여 내 사이트에 대한 2 개 개의 새로운 역할을 설정했습니다.

각 역할에는 자체 등록 페이지와 로그인이 있어야합니다. 방문자는 구매자와 판매자로 등록 할 수 있지만 그 중 하나만으로 로그인 할 수 있습니다. 따라서 방문자가 판매자로 로그인 한 후 구매자 페이지로 이동하면 구매자로 로그인 할 수 있으며 로그인하면 자동으로 판매자로 로그 아웃됩니다.

플러그인을 찾기 위해 몇 시간 동안 검색했지만 플러그인을 찾지 못했습니다. 역할 등록이 다른 웹 사이트에서 매우 일반적인 구성 인 것 같습니다.

이와 같은 플러그인이 존재합니까? 그리고 어떻게 할 수 없다면?


1
별도의 양식이 필요하지 않으며 역할을 선택할 수있는 단일 등록 양식 만 있으면됩니다. 일단 역할에 등록되면 모든 사람이 동일한 로그인 페이지를 사용할 수 있습니다. 누군가 구매자로 등록하면 자격 증명을 가진 구매자 이외의 다른 사람으로 로그인 할 수있는 방법이 없습니다. 아마도 이와 같은 것이 올바른 방향을 가리킬 것입니다.
Milo

이 링크를 사용할 수 있습니다 wordpress.stackexchange.com/questions/237248/…
Charles Xavier

답변:


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

그러나 Milo는 다음과 같이 언급했습니다.

"누군가가 구매자로 등록하면 자신의 자격 증명으로 구매자 이외의 다른 사람으로 로그인 할 수있는 방법이 없습니다"

즉, 다른 역할을 등록하려면 다른 이메일을 사용해야합니다.

최신 정보

이것은 동일한 역할을 사용하지만 각 역할에 대해 다른 필드를 사용하는 방법을 보여주는 예제가 포함 된 업데이트입니다.

따라서 기능을 약간 변경하면됩니다.

//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에게 감사합니다! 예, 방문자가 다른 이메일로 판매자와 구매자로 한 번 두 번 등록한다는 의미입니다. 그러나 각각 다른 필드를 포함하기 때문에 두 개의 별도 등록 양식이 필요합니다. 예를 들어, 판매자의 등록 양식에는 "사업자 이름"및 "회사 주소"필드가 포함되며 구매자의 등록 양식에는 "구매자 이름"필드가 포함됩니다. Bainternet, 나는 다른 매개 변수가있는 동일한 페이지를 가리 키기 때문에 코드를 그대로 사용할 수 있는지 확실하지 않습니다 (노력에 감사드립니다). 두 가지 형태로 어떻게 할 수 있습니까?
Ash

@Ash : 여전히 두 개의 별도 양식이 필요하지 않으며 역할을 기반으로 필드를 추가하기 만하면 예제로 답변을 업데이트합니다.
Bainternet

@Ash : 답변에서 업데이트를 확인하십시오.
Bainternet

@Bainternet, 추가 코드에 감사드립니다!
Ash

@Bainternet : 초보자 질문에 대해 미안하지만 그것이 내가하는 것입니다 :-)-이 코드는 플러그인에서만 사용할 수 있습니까 아니면 페이지의 템플릿 인 PHP 파일에서도 사용할 수 있습니까?
애쉬
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.