নিবন্ধকরণ পৃষ্ঠা থেকে ব্যবহারকারীর নামটি সরিয়ে ফেলা সম্ভব? যদি তাই হয়, কিভাবে?


16

নিবন্ধকরণ পৃষ্ঠা থেকে ব্যবহারকারীর নাম ক্ষেত্রটি সরিয়ে ফেলা সম্ভব?

আমি চাই ব্যবহারকারীরা কেবল তাদের ইমেল এবং পাসওয়ার্ড প্রবেশ করান।
কেবলমাত্র এই দুটি প্যারামিটারের ভিত্তিতে একটি নতুন ব্যবহারকারী তৈরি করা উচিত।

এটি কি সম্ভব এবং যদি তাই হয় তবে কীভাবে?


উত্তর:


11

একেবারে হ্যাঁ , আপনি এই অর্জন করতে পারেন।

বিধি 1: ওয়ার্ডপ্রেসের একটি ব্যবহারকারীর নাম প্রয়োজন। আমাদের অবশ্যই একটি ব্যবহারকারীর নাম সরবরাহ করতে হবে।

বিধি 2: ওয়ার্ডপ্রেস মূল কোডটি সম্পাদনা করবেন না।

আমরা ব্যবহারকারীর ক্ষেত্রটি লুকিয়ে রেখে এটি অর্জন করতে পারি, ইমেল পেতে পারি এবং এটি ব্যবহারকারীর নাম হিসাবে সংরক্ষণ করি।

পদক্ষেপ -১: ব্যবহারকারীর নাম পাঠ্যক্ষেত্র সরান

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

পদক্ষেপ -২: ব্যবহারকারীর ত্রুটি সরান

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

আপনার থিমের ফাংশন.এফপি ফাইলের উপরের কোডটি রাখুন ।

এটি অর্জনের জন্য আপনি একটি সম্পূর্ণ প্লাগইনও ডাউনলোড করতে পারেন।

প্লাগইন: https://wordpress.org/plugins/smart-wp-login/


4

নিশান্ত কুমারদের পদক্ষেপের পদক্ষেপে পদক্ষেপ 3 isset($_POST['user_login'])যা আমার পক্ষে কাজ করে না তা চেক করে , যেহেতু লগইনটি আসলে আমরা মুছে ফেলতে চাই।

আমার সমাধানটি ওয়ার্ডপ্রেস কোড শৈলীর সাথে থাকার জন্য একটি পৃথক ফাংশন হিসাবে নীচে (থিমের ফাংশন.পিপিতে) রয়েছে:

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

@ নিশান্ত কুমার এই প্রশ্নের যথাযথ এবং গ্রহণযোগ্য উত্তর দিয়েছেন। তবে ওয়ার্ডপ্রেস ৪.০ সংস্করণ প্রকাশের পরে কোনও ত্রুটি রয়েছে। কোডেক্স থেকে -

দ্রষ্টব্য: ৪.০ থেকে এই বৈশিষ্ট্যগুলি ব্যক্তিগত, [২৮৫১১] দেখুন

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এবং শর্ত মেলে না হবে মোটেই @ এমসনেসিয়াম প্রস্তাবিত শর্ত থেকে আমরা এটিকে আরও ভালভাবে সরিয়ে দেব।


2

@ নিশান্ত-কুমারের জবাবের বিষয়ে অবতারণা, এখানে একটি ভ্যানিলা জেএস, কোনও অতিরিক্ত জেএস স্ক্রিপ্ট নেই, 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
});

আপনাকে কেবল এই ফাংশন.এফপি ফাইলে এই কোডটি যুক্ত করতে হবে (বা আপনার কাস্টম প্লাগইনে যদি আপনার একটি থাকে)


1
আমি এটি চেষ্টা করেছিলাম এবং একটি ত্রুটি পেয়েছি user_email is not defined at HTMLInputElement.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');
});

এই উদাহরণে, 'ফর্ম ইনপুট.ইউজারনেম' ব্যবহারকারীর নাম ক্ষেত্রটি সন্ধানের জন্য jQuery নির্বাচনকারী হতে হবে, নির্বাচক কাঠামোর সাথে মেলে কিনা তা নিশ্চিত করার জন্য আপনার পৃষ্ঠায় এইচটিএমএল কাঠামো পরীক্ষা করতে হবে।

2) ব্যবহারকারীদের তাদের ইমেল ঠিকানা দিয়ে লগইন করতে মঞ্জুরি দেওয়ার জন্য পূর্ববর্তী যেমন উল্লিখিত ( http://wordpress.org/extend/plugins/wp-email-login/ ) এর মতো একটি প্লাগইন ব্যবহার করুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.