Как получить идентификатор пользователя по его display_name

12 мар. 2013 г., 14:45:03
Просмотры: 20.3K
Голосов: 4

У меня есть display_name пользователя, и с его помощью я хочу получить id этого пользователя.

Итак, как я могу получить идентификатор пользователя?

0
Все ответы на вопрос 5
0

Вы можете использовать следующую функцию:

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, нам нужно создать новую функцию.

12 мар. 2013 г. 15:21:51
3

Используйте WP_User_Query.

$args= array(
  'search' => 'Отображаемое имя', // или логин или nicename в этом примере
  'search_fields' => array('user_login','user_nicename','display_name')
);
$user = new WP_User_Query($args);

Только что ответил на очень похожий вопрос: Как получить ID автора по его имени

12 мар. 2013 г. 16:22:44
Комментарии

У меня это не работает

EHerman EHerman
8 апр. 2014 г. 17:49:04

@EHerman: без дополнительной информации я не могу сказать, почему.

s_ha_dum s_ha_dum
8 апр. 2014 г. 17:58:44

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

shukshin.ivan shukshin.ivan
28 сент. 2015 г. 17:07:18
0

Я не думаю, что это упоминалось ранее, возможно, потому что поиск осуществляется по 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;
}
10 янв. 2017 г. 16:34:12
1

Код полностью не тестировался, но я не вижу причин, почему он не должен работать с использованием 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 );
12 мар. 2013 г. 16:34:29
Комментарии

display_name отсутствует в таблице usermeta, это отдельная колонка в таблице users.

Peter Bushnell Peter Bushnell
10 янв. 2017 г. 16:37:19
0

По умолчанию запрос пользователей в 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;
}
4 апр. 2014 г. 10:36:23