เป็นไปได้ไหมที่จะลบชื่อผู้ใช้ออกจากหน้าลงทะเบียน? ถ้าเป็นเช่นนั้นได้อย่างไร


16

เป็นไปได้ไหมที่จะลบฟิลด์ชื่อผู้ใช้ออกจากหน้าลงทะเบียน?

ฉันต้องการให้ผู้ใช้ป้อนเฉพาะอีเมลและรหัสผ่านของพวกเขา
ผู้ใช้ใหม่ควรสร้างขึ้นตามพารามิเตอร์ทั้งสองนี้เท่านั้น

เป็นไปได้และถ้าเป็นเช่นนั้นได้อย่างไร


คำตอบ:


11

แน่นอนใช่คุณสามารถบรรลุเป้าหมายนี้

กฎข้อที่ 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

ขั้นตอนที่ 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']);
GreatBlakes

4

@Nishant Kumar ให้คำตอบที่สมบูรณ์แบบและควรเป็นที่ยอมรับสำหรับคำถามนี้ อย่างไรก็ตามมีข้อผิดพลาดหลังจากรุ่น Wordpress 4.0 เปิดตัว จากcodex -

หมายเหตุ: ตั้งแต่ 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

ฉันคิดว่าวิธีแก้ปัญหาสำหรับคำขอนี้จะเป็น 'แฮ็ค' เนื่องจาก 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/ ) เพื่อให้ผู้ใช้สามารถเข้าสู่ระบบด้วยที่อยู่อีเมลของพวกเขา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.