如何使昵称在WP用户前端唯一


How to make nickname unique in WP User Frontend?

我可以使昵称唯一在WP -admin/profile.php,但我不能在wpuf_update_profile为WP用户前端,请帮助,谢谢!

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;
        $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($e >= 1) {
            $err[$key] = $_POST['username'];
            add_filter('user_profile_update_errors', "check_{$key}_field", 10, 3);
        }
    }
}
function check_nick_field($errors, $update, $user) {
        $errors->add('display_nick_error',__('sorry'));
        return false;
}
// Make nickname & display_name unique
// and automatically change non unique nicks & display name to username
// in case you already have existing users
/*
 * 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();
}