Kayıt sayfasından kullanıcı adı alanını kaldırmak mümkün müdür? Öyleyse nasıl?


Yanıtlar:


11

Kesinlikle EVET , bunu başarabilirsiniz.

Kural 1: WordPress bir kullanıcı adı gerektirir. Bir kullanıcı adı sağlamalıyız.

Kural 2: WordPress çekirdek kodunu düzenlemeyin.

Bunu kullanıcı adı alanını gizleyerek, e-posta alıp kullanıcı adı olarak saklayarak başarabiliriz.

Adım-1: Kullanıcı Adı metin alanını kaldırın

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

Adım-2: Kullanıcı Adını Kaldır hatası

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

Adım-3: Arka Plan Kayıt İşlevselliğini Değiştirin.

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

Yukarıdaki kodu temanızın function.php dosyasına yerleştirin.

Bunu başarmak için eksiksiz bir eklenti de indirebilirsiniz.

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


4

Nishant Kumars sonrası 3. adım isset($_POST['user_login'])benim için işe yaramadı olmadığını kontrol eder , çünkü giriş aslında kaldırmak istediğimiz şeydir.

Çözümüm, wordpress kod stili ile kalmak için ayrı bir işlev olarak (temanın işlevlerinde.php) aşağıdaki gibidir:

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

Bir "geçersiz karakterler" hata mesajı alıyordum, bu yüzden @ve .e-posta adresindeki kullanıcı adı olarak değiştirdim:$_POST['user_login'] = str_replace(array('@', '.'), '_', $_POST['user_email']);
GreatBlakes

4

@Nishant Kumar bu soruya mükemmel ve kabul edilmesi gereken bir cevap verdi. Ancak Wordpress 4.0 sürümü yayınlandıktan sonra bir aksaklık var. Gönderen kodeksine -

Not: 4.0'dan beri bu özellikler özeldir , bkz. [28511] .

registration_errors Burada filtre biraz değişiklik gerektirir.

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

Not: @mnnesium'un belirttiği gibi, kullanıcı adı alanından tamamen kurtulduysak (benim durumumda Tema'yı kullandım, normal kayıt formunu geçersiz kılmak için giriş eklentimi kullandım ve orada sadece kullanıcı adı alanını kaldırdım) sonra $_POST['user_login']olacak nullve koşul eşleşmeyecek hiç. Bunu mcnesium'un önerdiği gibi kaldırmalıyız.


2

@ Nishant-kumar'ın cevabını yineleyen, burada bir vanilya JS, ekstra js komut dosyası yok, 1 adım, arka uç düzenleme gerekli değil, sadece e-posta girişi ile kayıt formu yapmak için çözüm:

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

Bu kodu sadece function.php dosyanıza (veya varsa özel eklentinize) eklemeniz gerekir.


1
Bunu denedim ve bir hata aldım user_email is not defined at HTMLInputElement.syncUserName. Üst fonksiyonun içindeki "function syncUserName" bölümünü taşımak hatayı kaldırır ve kod snippet'i çok iyi çalışır. Başkalarının da aynı sorunla karşılaşabilmesi için yorum yapmanız yeterlidir. Teşekkürler Gfra54.
Betty

Kesinlikle haklısın @betty, var olanı user_emailaynı kapsama koymak için cevabımı düzelttim . Teşekkürler.
Gfra54

1

Wordpress tüm kayıtlı kullanıcılar için bir kullanıcı adı olmasını gerektirdiğinden, bu istek için herhangi bir çözümün bir 'hack' olacağını düşünüyorum. Yukarıda belirtilen eklenti bile büyük olasılıkla sadece kullanıcı adını e-posta adresi aracılığıyla buluyor ve daha sonra siteye giriş yapmak için bu kullanıcı adını kullanıyor.

Bir hack ile iyiyseniz, işinize yarayabilecek bir konsept:

1) Kayıt formunuzdaki kullanıcı adı alanını benzersiz bir numarayla önceden doldurun, mevcut zaman damgasını kullanarak herhangi bir kopya almayı önlemek iyi bir fikirdir. Daha sonra bu alanı, kullanıcının formunu doldururken ekranda görmemesi için gizlersiniz.

JQuery kullanıyorsanız aşağıdaki gibi bir şey kullanabilirsiniz:

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

Bu örnekte, 'form input.username' kullanıcı adı alanını bulmak için jQuery seçici olacaktır, seçicinin yapıyla eşleştiğinden emin olmak için sayfanızdaki html yapısını kontrol etmeniz gerekir.

2) Kullanıcıların e-posta adresleriyle giriş yapmasına izin vermek için daha önce belirtilen gibi bir eklenti kullanın ( http://wordpress.org/extend/plugins/wp-email-login/ ).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.