Как получить идентификатор пользователя по его display_name
У меня есть display_name
пользователя, и с его помощью я хочу получить id
этого пользователя.
Итак, как я могу получить идентификатор пользователя?

Вы можете использовать следующую функцию:
function get_user_id_by_display_name( $display_name ) {
global $wpdb;
if ( ! $user = $wpdb->get_row( $wpdb->prepare(
"SELECT `ID` FROM $wpdb->users WHERE `display_name` = %s", $display_name
) ) )
return false;
return $user->ID;
}
Это тот же код, который использует функция get_user_by()
, но поскольку эта функция работает только с ID
, slug
, email
или login
, нам нужно создать новую функцию.

Используйте WP_User_Query
.
$args= array(
'search' => 'Отображаемое имя', // или логин или nicename в этом примере
'search_fields' => array('user_login','user_nicename','display_name')
);
$user = new WP_User_Query($args);
Только что ответил на очень похожий вопрос: Как получить ID автора по его имени

Дамп переменной $user
показывает, что display_name
отсутствует в SQL-запросе. Используйте другой ответ, чтобы включить его http://wordpress.stackexchange.com/questions/201779/how-to-get-user-by-display-name-with-wp-user-query

Я не думаю, что это упоминалось ранее, возможно, потому что поиск осуществляется по display_name, а также по email-адресу, URL, ID и имени пользователя. Это больше, чем требуется, но хорошо сработало в моём конкретном случае.
// Функция для получения ID пользователя по строке поиска
function get_user_id_by_search( $search_term ) {
// Получаем пользователей по заданному критерию поиска
$user = get_users(array('search' => $search_term));
// Если пользователь найден, возвращаем его ID
if (!empty($user))
return $user[0]->ID;
}

Код полностью не тестировался, но я не вижу причин, почему он не должен работать с использованием get_users()
и meta query:
$users = get_users( array(
'meta_key' => 'display_name',
'meta_value' => 'John Doe'
) );
$user = ( ( isset( $users[0] ) ? $users[0] : false );
$user_id = ( $user ? $user->ID : false );

По умолчанию запрос пользователей в WordPress не позволяет использовать display_name в столбце поиска, даже если он добавлен. Вот решение http://manchumahara.com/2014/04/03/search-user-by-display-name-in-wordpress-sitewide/
Пример:
$args = array(
'search' => 'Отображаемое имя', // или логин, или nicename в этом примере
'search_fields' => array('user_login','user_nicename','display_name')
);
$user = new WP_User_Query($args);
Приведённый выше запрос не будет искать по display_name.
Вам необходимо использовать этот фильтр:
add_filter('user_search_columns', 'user_search_columns_bd' , 10, 3);
function user_search_columns_bd($search_columns, $search, $this){
if(!in_array('display_name', $search_columns)){
$search_columns[] = 'display_name';
}
return $search_columns;
}
