Установка "Отображаемое имя публично" как имени пользователя по умолчанию
На моем сайте WordPress в настоящее время пользователи отображаются по комбинации ИМЯ + ФАМИЛИЯ.
Большинство пользователей предпочитают, чтобы их идентифицировали по именам пользователей. Я объяснил, как вручную изменить настройку "Отображаемое имя публично" (через настройки пользователя), но это не идеальное решение.
Я хочу, чтобы новые пользователи по умолчанию отображались по своим именам пользователей. Важно, чтобы это изменение отражалось в плагинах, которые используют свойство "Отображаемое имя публично".
Как это можно реализовать?

Если вы хотите применить это для всех будущих пользователей, подключитесь к событию 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);

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

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

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

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

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

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

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

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

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

Для программной установки отображаемого имени как при регистрации, так и при обновлении профиля, избегая бесконечного цикла, который возник у Бетти, необходимо проверять, не установлено ли уже отображаемое имя требуемым образом.
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));
}
}

Для обновления при регистрации и обновлении профиля:
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();
