등록 페이지에서 사용자 이름 필드를 제거 할 수 있습니까?
사용자가 이메일과 비밀번호 만 입력하기를 원합니다.
이 두 매개 변수만을 기반으로 새 사용자를 작성해야합니다.
가능합니까? 그렇다면 어떻게해야합니까?
등록 페이지에서 사용자 이름 필드를 제거 할 수 있습니까?
사용자가 이메일과 비밀번호 만 입력하기를 원합니다.
이 두 매개 변수만을 기반으로 새 사용자를 작성해야합니다.
가능합니까? 그렇다면 어떻게해야합니까?
답변:
물론 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 파일 에 위의 코드를 넣으십시오 .
이를 위해 완전한 플러그인을 다운로드 할 수도 있습니다.
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']);
@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이 제안한 조건에서 제거하는 것이 좋습니다.
@ 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 파일 또는 사용자 정의 플러그인 에 추가하면됩니다.
user_email is not defined at HTMLInputElement.syncUserName
. 상위 함수 내에서 "function syncUserName"부분을 이동하면 오류가 제거되고 코드 스 니펫이 크게 작동합니다. 다른 사람들이 같은 문제를 겪을 수 있도록 의견을 말하십시오. 감사합니다 Gfra54.
user_email
var를 같은 범위에 두기 위해 내 대답을 수정했습니다 . 감사.
워드 프레스에 등록 된 모든 사용자의 사용자 이름이 필요하기 때문에이 요청에 대한 솔루션은 '해킹'이 될 것이라고 생각합니다. 위에서 언급 한 플러그인조차도 전자 메일 주소를 통해 사용자 이름을 찾은 다음 해당 사용자 이름을 사용하여 사이트에 로그인합니다.
해킹으로 괜찮다면 다음과 같은 개념을 사용할 수 있습니다.
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/ ) 과 같은 플러그인을 사용하여 사용자가 이메일 주소로 로그인 할 수 있도록합니다.