등록 페이지에서 사용자 이름 필드를 제거 할 수 있습니까? 그렇다면 어떻게?


답변:


11

물론 YES , 당신은이 작업을 수행 할 수 있습니다.

규칙 1 : WordPress에는 사용자 이름이 필요합니다. 사용자 이름을 제공해야합니다.

규칙 2 : WordPress 핵심 코드를 편집하지 마십시오.

사용자 이름 필드를 숨기고 이메일을 받고 사용자 이름으로 저장하면됩니다.

1 단계 : 사용자 이름 텍스트 필드 제거

add_action('login_head', function(){
?>
    <style>
        #registerform > p:first-child{
            display:none;
        }
    </style>

    <script type="text/javascript" src="<?php echo site_url('/wp-includes/js/jquery/jquery.js'); ?>"></script>
    <script type="text/javascript">
        jQuery(document).ready(function($){
            $('#registerform > p:first-child').css('display', 'none');
        });
    </script>
<?php
});

2 단계 : 사용자 이름 제거 오류

//Remove error for username, only show error for email only.
add_filter('registration_errors', function($wp_error, $sanitized_user_login, $user_email){
    if(isset($wp_error->errors['empty_username'])){
        unset($wp_error->errors['empty_username']);
    }

    if(isset($wp_error->errors['username_exists'])){
        unset($wp_error->errors['username_exists']);
    }
    return $wp_error;
}, 10, 3);

3 단계 : 백그라운드 등록 기능 조작

add_action('login_form_register', function(){
    if(isset($_POST['user_login']) && isset($_POST['user_email']) && !empty($_POST['user_email'])){
        $_POST['user_login'] = $_POST['user_email'];
    }
});

테마의 functions.php 파일 에 위의 코드를 넣으십시오 .

이를 위해 완전한 플러그인을 다운로드 할 수도 있습니다.

플러그인 : https://wordpress.org/plugins/smart-wp-login/


4

Nishant Kumars의 게시물의 3 단계 isset($_POST['user_login'])는 로그인이 실제로 제거하려는 것이기 때문에 이것이 작동하지 않는지 확인합니다 .

내 솔루션은 다음과 같이 (테마의 functions.php에서) 별도의 함수로 워드 ​​프레스 코드 스타일을 유지하는 것입니다.

function copy_username_to_email (){
    if(isset($_POST['user_email']) && !empty($_POST['user_email'])){
        $_POST['user_login'] = $_POST['user_email'];
    }
}
add_action('login_form_register', 'copy_username_to_email');

"잘못된 문자"오류 메시지가 표시 되어 전자 메일 주소에서 사용자 이름으로 @.을 (를) 사용자 이름으로 $_POST['user_login'] = str_replace(array('@', '.'), '_', $_POST['user_email']);
바꿨습니다

4

@Nishant Kumar는이 질문에 완벽하고 수용 가능한 답변을하였습니다. 그러나 Wordpress 4.0 버전이 출시 된 후 결함이 있습니다. 에서 사본 -

참고 :이 속성은 4.0 이후로 비공개 입니다. [28511]을 참조하십시오 .

registration_errors 여기서 필터를 약간 수정해야합니다.

//Remove error for username, only show error for email only.

add_filter('registration_errors', 'remove_username_empty_error', 10, 3);

function remove_username_empty_error($wp_error, $sanitized_user_login, $user_email){

    if(isset($wp_error->errors['empty_username'])){
        $wp_error->remove('empty_username');
    }    
    if(isset($wp_error->errors['username_exists'])){
        $wp_error->remove('username_exists');
    }
    return $wp_error;
}

참고 : @mcnesium가 언급 한 바와 같이 우리는 완전히 사용자 이름 필드의 지웠어 경우, 다음 (내 경우에는 내가 정규 등록 양식을 무시 테마 내 로그인 플러그인을 사용하고 난 그냥 사용자 이름 필드가 제거) $_POST['user_login']될 것입니다 null및 조건은 일치하지 않습니다 조금도. @mcnesium이 제안한 조건에서 제거하는 것이 좋습니다.


2

@ nishant-kumar의 답변을 반복하면 여기에 바닐라 JS, 추가 js 스크립트 없음, 1 단계, 백엔드 편집 필요 없음, 이메일 입력만으로 가입 양식을 만드는 솔루션이 있습니다.

/** Hook your code to the login / Sign up page **/
add_action('login_head', function(){

    /* Style to hide the user_name field group */
    ?>
    <style>
        #registerform > p:first-child{
            display:none;
        }
    </style>

    <script type="text/javascript">
        /* Execute this action when the DOM is ready AND after everything in the page is loaded */
        let user_email;
        window.addEventListener('load',function() {
            user_email = document.querySelector('[name="user_email"]');
            if(user_email) { // Execute only if there is a user_email field on page
                user_email.addEventListener('keyup',syncUserName);
                user_email.addEventListener('change',syncUserName);
            }
        });

        /* sync user_email's value with the hidden user_login field */
        function syncUserName() {
                document.querySelector('[name="user_login"]').value = user_email.value;
        }

    </script>
<?php
});

이 코드를 functions.php 파일 또는 사용자 정의 플러그인 에 추가하면됩니다.


1
나는 이것을 시도하고 오류가 발생했습니다 user_email is not defined at HTMLInputElement.syncUserName. 상위 함수 내에서 "function syncUserName"부분을 이동하면 오류가 제거되고 코드 스 니펫이 크게 작동합니다. 다른 사람들이 같은 문제를 겪을 수 있도록 의견을 말하십시오. 감사합니다 Gfra54.
Betty

당신은 절대적으로 @betty입니다. 나는 user_emailvar를 같은 범위에 두기 위해 내 대답을 수정했습니다 . 감사.
Gfra54

1

워드 프레스에 등록 된 모든 사용자의 사용자 이름이 필요하기 때문에이 요청에 대한 솔루션은 '해킹'이 될 것이라고 생각합니다. 위에서 언급 한 플러그인조차도 전자 메일 주소를 통해 사용자 이름을 찾은 다음 해당 사용자 이름을 사용하여 사이트에 로그인합니다.

해킹으로 괜찮다면 다음과 같은 개념을 사용할 수 있습니다.

1) 현재 타임 스탬프를 사용하여 등록 양식의 사용자 이름 필드를 고유 번호로 미리 채우십시오. 중복 시간을 피하는 것이 좋습니다. 그런 다음 양식을 작성할 때 사용자가 화면에 표시되지 않도록이 필드를 숨 깁니다.

jQuery를 사용하는 경우 다음과 같은 것을 사용할 수 있습니다.

$(document).ready(function() {
    var timestamp = (new Date).getTime();
    $('form input.username').val(timestamp);
    $('form input.username').css('display', 'none');
});

이 예제에서 'form input.username'은 사용자 이름 필드를 찾기위한 jQuery 선택기이며, 선택기가 구조와 일치하는지 확인하려면 페이지에서 html 구조를 확인해야합니다.

2) 앞에서 언급 한 플러그인 ( http://wordpress.org/extend/plugins/wp-email-login/ ) 과 같은 플러그인을 사용하여 사용자가 이메일 주소로 로그인 할 수 있도록합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.