प्रदर्शन नाम अद्वितीय बनाएं


13

अभी आप अपना प्रदर्शन नाम जो चाहें बना सकते हैं, आप एक व्यवस्थापक भी लगा सकते हैं। क्या प्रदर्शन नाम को अद्वितीय बनाना संभव है?

जवाबों:


7

जहाँ तक मेरी जानकारी है, आप सभी कर सकते हैं कि प्रदर्शन नाम को फ़िल्टर करें pre_user_display_nameऔर जाँचें कि क्या यह पहले से मौजूद है। दुर्भाग्य WP_User_Queryसे display_name, द्वारा क्वेरी करने का समर्थन नहीं करता है , इसलिए हमें WHEREक्लॉज़ से भी जोड़ना होगा pre_user_query। इसके अतिरिक्त, कोई ऐसा सुंदर तरीका नहीं है जिसके बारे में सोचकर मैं उस मामले को संभाल सकूं जहां display_nameपहले से मौजूद कुछ भी नहीं है, क्योंकि हम फ़िल्टर के माध्यम से नहीं जानते कि यह संभावित प्रदर्शन नाम किस उपयोगकर्ता से जुड़ा है। या शायद मैं बस थक गया हूँ और कुछ स्पष्ट याद आ रहा है! वैसे भी, यहाँ एक त्वरित परीक्षण मैंने बनाया:

class wpa82239_display_name {
    private $display_name;

    public function __construct(){
        add_filter( 'pre_user_display_name', array( $this, 'display_name_filter' ) );
    }

    public function display_name_filter( $display_name ){

        $this->display_name = $display_name;
        add_action( 'pre_user_query', array( $this, 'user_query_filter' ) );
        $args = array(
            'number' => 1,
            'fields' => 'ID'
        );
        $user_search = new WP_User_Query( $args );
        remove_action( 'pre_user_query', array( $this, 'user_query_filter' ) );

        if( 0 == $user_search->total_users )
            return $display_name;

        return null;
    }

    public function user_query_filter( $query ){
        global $wpdb;
        $query->query_where .= $wpdb->prepare(
            " AND $wpdb->users.display_name = %s",
            $this->display_name
        );
    }

}
$wpa82239_display_name = new wpa82239_display_name();

हे मिलो, इस समाधान के लिए धन्यवाद, लेकिन यह थोड़े बेकार है अगर यह केवल डिस्प्ले_नाम को अनसेट करता है। इस नए और नए दिन पर कोई विचार?
FLX

मैं यह नहीं कहूंगा कि यह पूरी तरह से बेकार है। फ्रंट-एंड पर, आप लॉगिन करने के लिए डिफ़ॉल्ट कर सकते हैं यदि प्रदर्शन नाम खाली है, तो बैक-एंड पर, आप admin_footer के माध्यम से थोड़ी सी जावास्क्रिप्ट जोड़ सकते हैं एक चेतावनी फेंकने के लिए कि वे एक अद्वितीय प्रदर्शन नाम का चयन करें।
मिलो

0

यह काफी गंदा है, लेकिन यह काम करता है, बस इसे अपने थीम फ़ंक्शन में रखें। किसी एकल साइट पर या किसी मल्टीसिट पर अपने म्यू-प्लगइन्स फ़ोल्डर के अंदर फ़ंक्शन में।

स्क्रिप्ट मौजूदा उपयोगकर्ताओं को भी स्कैन करेगी (यदि आपकी साइट में पहले से ही कई हैं) और किसी भी गैर-विशिष्ट प्रदर्शन नामों को अपडेट किया जाएगा और उन्हें उपयोगकर्ता नाम से बदल दिया जाएगा।

मुझे पता है कि यह पूरी तरह से आदर्श नहीं है, लेकिन मौजूदा उपयोगकर्ताओं या सुधारों से निपटने के लिए किसी भी सुझाव का हमेशा स्वागत है।

 
    // Make nickname & display_name unique
    // and automatically change non unique nicks & display name to username
    // in case you already have existing users
    // by Ashok & Vaughan Montgomery
    /*
     * adding action when user profile is updated
     */
    add_action('personal_options_update', 'check_display_name');
    add_action('edit_user_profile_update', 'check_display_name');
    function check_display_name($user_id) {
            global $wpdb;
        // Getting user data and user meta data
            $err['display'] = $wpdb->get_var($wpdb->prepare("SELECT COUNT(ID) FROM $wpdb->users WHERE display_name = %s AND ID <> %d", $_POST['display_name'], $_POST['user_id']));
        $err['nick'] = $wpdb->get_var($wpdb->prepare("SELECT COUNT(ID) FROM $wpdb->users as users, $wpdb->usermeta as meta WHERE users.ID = meta.user_id AND meta.meta_key = 'nickname' AND meta.meta_value = %s AND users.ID <> %d", $_POST['nickname'], $_POST['user_id']));
        foreach($err as $key => $e) {
            // If display name or nickname already exists
            if($e >= 1) {
                $err[$key] = $_POST['username'];
                // Adding filter to corresponding error
                add_filter('user_profile_update_errors', "check_{$key}_field", 10, 3);
            }
        }
    }
    /*
     * Filter function for display name error
     */
    function check_display_field($errors, $update, $user) {
            $errors->add('display_name_error',('Sorry, Display Name is already in use. It needs to be unique.'));
            return false;
    }
    /*
     * Filter function for nickname error
     */
    function check_nick_field($errors, $update, $user) {
            $errors->add('display_nick_error',('Sorry, Nickname is already in use. It needs to be unique.'));
            return false;
    }
    /*
     * Check for duplicate display name and nickname and replace with username
     */
    function display_name_and_nickname_duplicate_check() {
        global $wpdb;
        $query = $wpdb->get_results("SELECT * FROM $wpdb->users");
        $query2 = $wpdb->get_results("SELECT * FROM $wpdb->users as users, $wpdb->usermeta as meta WHERE users.ID = meta.user_id AND meta.meta_key = 'nickname'");
        $c = count($query);
        for($i = 0; $i < $c; $i++) {
            for($j = $i+1; $j < $c; $j++) {
                if($query[$i]->display_name == $query[$j]->display_name){
                    wp_update_user(
                            array(
                                  'ID' => $query[$i]->ID,
                                  'display_name' => $query[$i]->user_login
                            )
                        );
                }
                if($query2[$i]->meta_value == $query2[$j]->meta_value){
                    update_user_meta($query2[$i]->ID, 'nickname', $query2[$i]->user_login, $prev_value);
                }
            }
        }
    }
    // Call the function
    display_name_and_nickname_duplicate_check();

/*
 * Calling the display_name_and_nickname_duplicate_check() again when a new user is registered
 */
add_action( 'user_register', 'check_nickname', 10, 1 );
function check_nickname() {
    display_name_and_nickname_duplicate_check();
}


0

इसे इस्तेमाल करे:

add_action('personal_options_update', 'check_display_name');
add_action('edit_user_profile_update', 'check_display_name');
function check_display_name($user_id) {
global $wpdb;
// Getting user data and user meta data
$err['display'] = $wpdb->get_var($wpdb->prepare("SELECT COUNT(ID) FROM $wpdb->users WHERE display_name = %s AND ID <> %d", $_POST['display_name'], $_POST['user_id']));
$err['nick'] = $wpdb->get_var($wpdb->prepare("SELECT COUNT(ID) FROM $wpdb->users as users, $wpdb->usermeta as meta WHERE users.ID = meta.user_id AND meta.meta_key = 'nickname' AND meta.meta_value = %s AND users.ID <> %d", $_POST['nickname'], $_POST['user_id']));
foreach($err as $key => $e) {
// If display name or nickname already exists
if($e >= 1) {
$err[$key] = $_POST['username'];
// Adding filter to corresponding error
add_filter('user_profile_update_errors', "check_{$key}_field", 10, 3);
}
}
}
/*
* Filter function for display name error
*/
function check_display_field($errors, $update, $user) {
$errors->add('display_name_error',__('Sorry, Display Name is already in use. It needs to be unique.'));
return false;
}
/*
* Filter function for nickname error
*/
function check_nick_field($errors, $update, $user) {
$errors->add('display_nick_error',__('Sorry, Nickname is already in use. It needs to be unique.'));
return false;
}
/*
* Check for duplicate display name and nickname and replace with username
*/
function display_name_and_nickname_duplicate_check() {
global $wpdb;
$query = $wpdb->get_results("select * from $wpdb->users");
$query2 = $wpdb->get_results("SELECT * FROM $wpdb->users as users, $wpdb->usermeta as meta WHERE users.ID = meta.user_id AND meta.meta_key = 'nickname'");
$c = count($query);
for($i = 0; $i < $c; $i++) {
for($j = $i+1; $j < $c; $j++) {
if($query[$i]->display_name == $query[$j]->display_name){
wp_update_user(
array(
'ID' => $query[$i]->ID,
'display_name' => $query[$i]->user_login
)
);
}
if($query2[$i]->meta_value == $query2[$j]->meta_value){
update_user_meta($query2[$i]->ID, 'nickname', $query2[$i]->user_login, $prev_value);
}
}
}
}
// Call the function
display_name_and_nickname_duplicate_check();

/*
* Calling the display_name_and_nickname_duplicate_check() again when a new user is registered
*/
add_action( 'user_register', 'check_nickname', 10, 1 );
function check_nickname() {
display_name_and_nickname_duplicate_check();
}

लिंक: http://bappi-d-great.com/unique-display-name-and-nickname-in-wordpress/

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