How to make Displayname & nicknames Unique
-
I’ve seen many requests for this, but no solutions. So a colleague and I spent the last few hours figuring this out.
It’s quite dirty, but does the job, just place it in your theme functions.php on a single site, or in a functions.php file inside your mu-plugins folder on a multisite.
The script will also scan existing users (if your site already has many) and any non unique display names will be updated and replaced with username.
I know this isn’t totally ideal, but any suggestions for dealing with existing users or improvements are always welcome.
// 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',__('<span id="IL_AD9" class="IL_AD">Sorry</span>, 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 <span id="IL_AD2" class="IL_AD">replace with</span> 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(); }
Viewing 7 replies - 1 through 7 (of 7 total)
Viewing 7 replies - 1 through 7 (of 7 total)
- The topic ‘How to make Displayname & nicknames Unique’ is closed to new replies.