Установка "Отображаемое имя публично" как имени пользователя по умолчанию

10 янв. 2016 г., 22:05:02
Просмотры: 15.7K
Голосов: 3

На моем сайте WordPress в настоящее время пользователи отображаются по комбинации ИМЯ + ФАМИЛИЯ.

Большинство пользователей предпочитают, чтобы их идентифицировали по именам пользователей. Я объяснил, как вручную изменить настройку "Отображаемое имя публично" (через настройки пользователя), но это не идеальное решение.

Я хочу, чтобы новые пользователи по умолчанию отображались по своим именам пользователей. Важно, чтобы это изменение отражалось в плагинах, которые используют свойство "Отображаемое имя публично".

Как это можно реализовать?

4
Комментарии

Вы можете изменить свою тему, чтобы всегда отображалось имя пользователя вместо чего-либо другого.

flomei flomei
10 янв. 2016 г. 23:13:05

В данном случае речь идет не только о теме, но и о нескольких используемых мной плагинах

CodyBugstein CodyBugstein
10 янв. 2016 г. 23:13:50

Эта информация была бы полезной в вашем первом сообщении, пожалуйста, добавьте ее.

flomei flomei
10 янв. 2016 г. 23:15:51

@flomei ок, я добавил это

CodyBugstein CodyBugstein
10 янв. 2016 г. 23:16:49
Все ответы на вопрос 3
12

Если вы хотите применить это для всех будущих пользователей, подключитесь к событию user_register и обновите данные там.

Получите данные WP_User с помощью get_userdata и обновите информацию пользователя через wp_update_user с новым отображаемым именем.

add_action( 'user_register', 'wpse_20160110_user_register', 10, 1 );

function wpse_20160110_user_register ( $user_id ) {

    // получаем данные пользователя

    $user_info = get_userdata( $user_id );

    // выбираем отображаемое имя по умолчанию

    $display_publicly_as = $user_info->user_login;

    // обновляем отображаемое имя

    wp_update_user( array ('ID' => $user_id, 'display_name' =>  $display_publicly_as));
}

Если вы хотите устанавливать это при каждом входе, подключитесь к хуку wp_login с приоритетом PHP_INT_MAX.

function wpse_20160110_wp_login ( $user_login, $user ) {

    wp_update_user(array('ID' => $user->ID, 'display_name' => $user_login));

}

add_action('wp_login', 'wpse_20160110_wp_login', PHP_INT_MAX, 2);
10 янв. 2016 г. 23:22:30
Комментарии

Спасибо! Куда нужно вставить этот код?

CodyBugstein CodyBugstein
11 янв. 2016 г. 21:49:26

Либо в плагин, либо в functions.php, но если добавить его в тему, есть вероятность, что он может быть перезаписан.

jgraup jgraup
11 янв. 2016 г. 22:28:51

Я попробовал часть с логином, но она не работает для изменения отображаемого имени

CodyBugstein CodyBugstein
17 янв. 2016 г. 08:18:12

Я попробовал действие при регистрации, и оно работает!

CodyBugstein CodyBugstein
17 янв. 2016 г. 08:23:26

Можешь сначала проверить, работает ли хук? Затем убедись, что данные поступают правильно. И наконец, что приоритет достаточно поздний? Помню, у меня это сработало, когда я тестировал.

jgraup jgraup
17 янв. 2016 г. 16:12:15

Как я могу проверить, достаточно ли поздний приоритет? (извините, я новичок в wordpress)

CodyBugstein CodyBugstein
17 янв. 2016 г. 23:55:40

0/1 — это рано. 10 — значение по умолчанию. 99 — поздно, означает выполнение после большинства хуков. Вы бы установили 99, если другой хук устанавливает эту информацию, и вы хотите убедиться, что вы последний, кто устанавливает метаданные. Но снова: проверьте, что хук вызывается, проверьте, что данные устанавливаются, прежде чем беспокоиться о приоритете.

jgraup jgraup
18 янв. 2016 г. 03:11:31

Круто, но как мне убедиться, что я последний? Я не могу вручную просматривать сотни файлов

CodyBugstein CodyBugstein
19 янв. 2016 г. 16:27:03

https://wordpress.org/plugins/query-monitor/ покажет вам хуки и их приоритеты.

jgraup jgraup
19 янв. 2016 г. 17:02:47

Я снова протестировал это. Обновил пример, чтобы использовать PHP_INT_MAX, который должен быть последним возможным временем для использования хука. Если это не сработает, значит, происходит что-то еще.

jgraup jgraup
19 янв. 2016 г. 17:26:07

Вы можете подключить его к хуку 'profile_update', чтобы он выполнялся при каждом обновлении пользователей.

Marco Marsala Marco Marsala
26 янв. 2018 г. 09:33:46

@MarcoMarsala Я попытался подключиться к 'profile_update' и получил бесконечный цикл. =.= Видимо, потому что эта функция тоже обновляет профиль.

Betty Betty
3 мар. 2019 г. 16:28:36
Показать остальные 7 комментариев
0

Для программной установки отображаемого имени как при регистрации, так и при обновлении профиля, избегая бесконечного цикла, который возник у Бетти, необходимо проверять, не установлено ли уже отображаемое имя требуемым образом.

add_action( 'user_register', 'set_login_as_displayname' );
add_action( 'profile_update', 'set_login_as_displayname' );

function set_login_as_displayname( $user_id )
{
    $data = get_userdata( $user_id );

    // Проверяем, совпадает ли логин пользователя с отображаемым именем
    if ($data->user_login != $data->display_name) {
        // Обновляем отображаемое имя, если оно не совпадает с логином
        wp_update_user( array ('ID' => $user_id, 'display_name' =>  $data->user_login));
    }
}
28 мая 2019 г. 14:22:31
0

Для обновления при регистрации и обновлении профиля:

function set_display_name_to_first_last_name( $user_id ) {
    $user_info = get_userdata( $user_id );

    // Формируем полное имя, используя имя и фамилию.
    $full_name = trim( $user_info->first_name . ' ' . $user_info->last_name );

    // Если сформированное полное имя не пустое и отличается от текущего отображаемого имени, обновляем его.
    if ( ! empty( $full_name ) && $full_name !== $user_info->display_name ) {
        wp_update_user( array( 'ID' => $user_id, 'display_name' => $full_name ) );
    }
}

add_action( 'user_register', 'set_display_name_to_first_last_name' );
add_action( 'profile_update', 'set_display_name_to_first_last_name' );

Для обновления существующих пользователей (запустить один раз):

function update_existing_users_display_names() {
    // Получаем всех пользователей
    $users = get_users();

    foreach ( $users as $user ) {
        // Формируем полное имя, используя имя и фамилию.
        $full_name = trim( $user->first_name . ' ' . $user->last_name );

        // Если сформированное полное имя не пустое и отличается от текущего отображаемого имени, обновляем его.
        if ( ! empty( $full_name ) && $full_name !== $user->display_name ) {
            wp_update_user( array( 'ID' => $user->ID, 'display_name' => $full_name ) );
        }
    }
}

// Вызываем функцию для выполнения обновления.
update_existing_users_display_names();
16 окт. 2023 г. 00:40:43