क्या पंजीकरण पृष्ठ से उपयोगकर्ता नाम फ़ील्ड को निकालना संभव है? यदि हां, तो कैसे?


16

क्या पंजीकरण पृष्ठ से उपयोगकर्ता नाम फ़ील्ड को निकालना संभव है?

मैं चाहता हूं कि उपयोगकर्ता केवल अपने ईमेल और पासवर्ड दर्ज करें।
केवल इन दो मापदंडों के आधार पर एक नया उपयोगकर्ता बनाया जाना चाहिए।

क्या यह संभव है और यदि हां, तो कैसे?


जवाबों:


11

बिल्कुल हाँ , आप इसे प्राप्त कर सकते हैं।

नियम 1: वर्डप्रेस को उपयोगकर्ता नाम की आवश्यकता होती है। हमें एक उपयोगकर्ता नाम प्रदान करना होगा।

नियम 2: वर्डप्रेस कोर कोड को संपादित न करें।

हम इसे उपयोगकर्ता नाम फ़ील्ड छिपाकर प्राप्त कर सकते हैं, ईमेल प्राप्त कर सकते हैं और इसे उपयोगकर्ता नाम के रूप में संग्रहीत कर सकते हैं।

चरण -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 चेक की जांच करता isset($_POST['user_login'])है कि क्या मेरे लिए काम नहीं करता है, क्योंकि लॉगिन वह है जिसे हम वास्तव में हटाना चाहते हैं।

मेरा समाधान इस प्रकार है (विषय के कार्यों में ।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

@ निशांत कुमार ने इस सवाल का सही और सटीक जवाब दिया। हालाँकि वर्डप्रेस 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 जैसी स्थिति से हम बेहतर तरीके से हटा सकते हैं।


2

@ निशांत-कुमार के जवाब पर, यहाँ एक वेनिला 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। ऊपरी फ़ंक्शन के अंदर "फ़ंक्शन SyncUserName" भाग को स्थानांतरित करना त्रुटि को दूर करता है और कोड स्निपेट बहुत काम करता है। बस टिप्पणी करें ताकि दूसरों को भी उसी मुद्दे का सामना करना पड़े। धन्यवाद Gfra54
बेटी

आप बिलकुल सही हैं @ फ़ुट्टी, मैंने अपने उत्तर को user_emailउसी दायरे में रखने के लिए सही किया । धन्यवाद।
Gfra54

1

मुझे लगता है कि इस अनुरोध का कोई समाधान 'हैक' होने जा रहा है क्योंकि वर्डप्रेस के लिए आवश्यक है कि सभी पंजीकृत उपयोगकर्ताओं के लिए एक उपयोगकर्ता नाम हो। यहां तक ​​कि ऊपर उल्लिखित प्लगइन भी संभवतः ईमेल पते के माध्यम से उपयोगकर्ता नाम ढूंढ रहा है, और फिर उस उपयोगकर्ता नाम का उपयोग करके साइट पर लॉगिन करें।

यदि आप हैक के साथ ठीक हैं, तो यहां एक अवधारणा है जो काम कर सकती है:

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/ ) उपयोगकर्ताओं को अपने ईमेल पते के साथ लॉगिन करने की अनुमति देने के लिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.