Apakah mungkin untuk menghapus bidang nama pengguna dari halaman pendaftaran? Jika ya, bagaimana caranya?

16

Apakah mungkin untuk menghapus bidang nama pengguna dari halaman pendaftaran?

Saya ingin pengguna hanya memasukkan email dan kata sandi mereka.
Pengguna baru harus dibuat berdasarkan dua parameter ini saja.

Apakah itu mungkin dan jika demikian, bagaimana?

phpnwordpress
sumber

Jawaban:

11

Tentu YA , Anda dapat mencapai ini.

Aturan 1: WordPress membutuhkan nama pengguna. Kami harus memberikan nama pengguna.

Aturan 2: Jangan mengedit kode inti WordPress.

Kami dapat mencapai ini dengan menyembunyikan bidang nama pengguna, mendapatkan email dan menyimpannya sebagai nama pengguna.

Langkah-1: Hapus bidang teks Nama Pengguna

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
});

Langkah-2: Hapus kesalahan Nama Pengguna

//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);

Langkah-3: Memanipulasi Fungsi Registrasi Latar Belakang.

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'];
    }
});

Masukkan kode di atas dalam file functions.php tema Anda .

Anda juga dapat mengunduh plugin lengkap untuk mencapai ini.

Plugin: https://wordpress.org/plugins/smart-wp-login/

Nishant Kumar
sumber
4

Langkah 3 di posting Nishant Kumars memposting cek jika isset($_POST['user_login'])yang tidak berhasil bagi saya, karena login adalah apa yang sebenarnya ingin kami hapus.

Solusi saya adalah sebagai berikut (dalam theme's functions.php), juga sebagai fungsi terpisah, untuk tetap dengan gaya kode wordpress:

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');
mcnesium
sumber
Saya menerima pesan kesalahan "karakter ilegal", jadi saya mengganti @dan .di alamat email sebagai nama pengguna:$_POST['user_login'] = str_replace(array('@', '.'), '_', $_POST['user_email']);
GreatBlakes
4

@Nishant Kumar memberikan jawaban yang sempurna dan harus diterima untuk pertanyaan ini. Namun ada kesalahan setelah versi Wordpress 4.0 dirilis. Dari kodeks -

Catatan: Sejak 4.0, properti ini bersifat pribadi, lihat [28511] .

registration_errors filter di sini memerlukan sedikit modifikasi.

//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;
}

Catatan: Seperti yang disebutkan oleh @mcnesium, jika kita benar-benar menyingkirkan bidang nama pengguna (dalam kasus saya saya menggunakan Theme plugin login saya untuk mengganti formulir pendaftaran reguler dan di sana saya baru saja menghapus bidang nama pengguna) maka $_POST['user_login']akan nulldan kondisinya tidak akan cocok sama sekali. Sebaiknya hapus itu dari kondisi seperti yang disarankan @mcnesium.

maksbd19
sumber
2

Iterasi pada jawaban @ nishant-kumar, ini vanilla JS, tidak ada skrip js tambahan, 1 langkah, tidak perlu mengedit backend, solusi untuk membuat formulir pendaftaran hanya dengan input email:

/** 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
});

Anda hanya perlu menambahkan kode ini di file functions.php Anda (atau di plugin khusus Anda , jika ada)

Gfra54
sumber
1
Saya mencoba ini dan mendapat kesalahan user_email is not defined at HTMLInputElement.syncUserName. Memindahkan bagian "function syncUserName" di dalam fungsi atas menghilangkan kesalahan dan potongan kode bekerja sangat baik. Hanya berkomentar agar orang lain dapat mengalami masalah yang sama. Terima kasih, Gfra54.
Betty
Anda benar sekali @betty, saya mengoreksi jawaban saya untuk meletakkan user_emailvar dalam cakupan yang sama. Terima kasih.
Gfra54
1

Saya pikir solusi apa pun untuk permintaan ini akan menjadi 'retas' karena wordpress mensyaratkan bahwa ada nama pengguna untuk semua pengguna terdaftar. Bahkan plugin yang disebutkan di atas kemungkinan besar hanya menemukan nama pengguna melalui alamat email, dan kemudian menggunakan nama pengguna itu untuk masuk ke situs.

Jika Anda baik-baik saja dengan peretasan, berikut adalah konsep yang dapat bekerja:

1) Pra-mengisi bidang nama pengguna dalam formulir pendaftaran Anda dengan nomor unik, menggunakan cap waktu saat ini adalah ide yang baik untuk menghindari duplikat. Anda kemudian akan menyembunyikan bidang ini sehingga pengguna tidak melihatnya di layar saat mengisi formulir mereka.

Jika Anda menggunakan jQuery, Anda dapat menggunakan sesuatu seperti:

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

Dalam contoh ini, 'form input.username' akan menjadi pemilih jQuery untuk menemukan bidang nama pengguna, Anda perlu memeriksa struktur html pada halaman Anda untuk memastikan pemilih cocok dengan struktur.

2) Gunakan plugin seperti yang disebutkan sebelumnya ( http://wordpress.org/extend/plugins/wp-email-login/ ) untuk memungkinkan pengguna login dengan alamat email mereka.

Matt Keys
sumber