เป็นไปได้ไหมที่จะลบฟิลด์ชื่อผู้ใช้ออกจากหน้าลงทะเบียน?
ฉันต้องการให้ผู้ใช้ป้อนเฉพาะอีเมลและรหัสผ่านของพวกเขา
ผู้ใช้ใหม่ควรสร้างขึ้นตามพารามิเตอร์ทั้งสองนี้เท่านั้น
เป็นไปได้และถ้าเป็นเช่นนั้นได้อย่างไร
เป็นไปได้ไหมที่จะลบฟิลด์ชื่อผู้ใช้ออกจากหน้าลงทะเบียน?
ฉันต้องการให้ผู้ใช้ป้อนเฉพาะอีเมลและรหัสผ่านของพวกเขา
ผู้ใช้ใหม่ควรสร้างขึ้นตามพารามิเตอร์ทั้งสองนี้เท่านั้น
เป็นไปได้และถ้าเป็นเช่นนั้นได้อย่างไร
คำตอบ:
แน่นอนใช่คุณสามารถบรรลุเป้าหมายนี้
กฎข้อที่ 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ของธีมของคุณ
คุณยังสามารถดาวน์โหลดปลั๊กอินที่สมบูรณ์เพื่อให้ได้สิ่งนี้
ขั้นตอนที่ 3 ในโพสต์ของ Nishant Kumars ตรวจสอบการโพสต์ว่าisset($_POST['user_login'])
สิ่งใดไม่ได้ผลสำหรับฉันเนื่องจากการเข้าสู่ระบบเป็นสิ่งที่เราต้องการนำออกจริง
โซลูชันของฉันมีดังต่อไปนี้ (ในฟังก์ชั่นของ theme.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 เปิดตัว จากcodex -
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 ในขอบเขตเดียวกัน ขอบคุณ
ฉันคิดว่าวิธีแก้ปัญหาสำหรับคำขอนี้จะเป็น 'แฮ็ค' เนื่องจาก wordpress ต้องการให้มีชื่อผู้ใช้สำหรับผู้ใช้ที่ลงทะเบียนทั้งหมด แม้แต่ปลั๊กอินที่กล่าวถึงข้างต้นก็เป็นเพียงการหาชื่อผู้ใช้ผ่านที่อยู่อีเมลจากนั้นใช้ชื่อผู้ใช้นั้นเพื่อเข้าสู่เว็บไซต์
หากคุณไม่เป็นไรกับแฮ็คต่อไปนี้เป็นแนวคิดที่ใช้งานได้:
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/ ) เพื่อให้ผู้ใช้สามารถเข้าสู่ระบบด้วยที่อยู่อีเมลของพวกเขา