Как я могу найти пользователя worpress по отображаемому имени или его части?


13

Мне нужно создать страницу поиска, которая будет отображать все, что связано с предоставленным поиском. т.е. commentsсодержащий его, events, posts, CPTS и usersс этим именем.

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

Ответы:


24

Поиск в главной таблице

Просто используйте WP_User_Queryс аргументом поиска.

Поэтому, если вы хотите найти, например, пользователя с ключевым словом в его user_emailили похожих столбцах {$wpdb->prefix}usersтаблицы, вы можете сделать следующее:

$users = new WP_User_Query( array(
    'search'         => '*'.esc_attr( $your_search_string ).'*',
    'search_columns' => array(
        'user_login',
        'user_nicename',
        'user_email',
        'user_url',
    ),
) );
$users_found = $users->get_results();

Имейте в виду, что *это подстановочный знак. Так ограничение, например, user_emailдля одного домена даст вам следующую строку для поиска: *@example.com.

searchСтрока имеет некоторые «магические» особенности: search_columnsзначение по умолчанию ...

  • user_emailесли @присутствует в searchарг.
  • user_loginи IDесли searchаргумент числовой
  • user_urlесли searchстрока содержит http://илиhttps://
  • или ... user_loginи user_nicenameесли строка присутствует.

Все эти значения по умолчанию устанавливаются, только если не search_columns указан аргумент.

Поиск в мета-таблице

Если вы хотите выполнить поиск, например, first_nameили last_name, то вам нужно будет выполнить, meta_queryпоскольку они не являются частью основной таблицы:

$search_string = esc_attr( trim( get_query_var('s') ) );
$users = new WP_User_Query( array(
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key'     => 'first_name',
            'value'   => $search_string,
            'compare' => 'LIKE'
        ),
        array(
            'key'     => 'last_name',
            'value'   => $search_string,
            'compare' => 'LIKE'
        )
    )
) );
$users_found = $users->get_results();

Убедитесь, что вы получили правильную строку поиска. Обычно это так get_query_var('s');, но это может - в зависимости от вашей формы name/idтакже быть чем-то другим, что вы, возможно, захотите получить, используя, $_GET['user_search']например. Убедитесь, что вы правильно удалили его и удалите ненужные пробелы в начале и конце строки.

Имейте в виду , что это array( array() )как есть это relationключ. Если вы просто хотите выполнить поиск по одному ключу, может быть проще выполнить следующее:

$search_string = esc_attr( trim( get_query_var('s') ) );
$users = new WP_User_Query( array(
    'meta_key'     => 'first_name',
    'meta_value'   => $search_string,
    'meta_compare' => 'LIKE',
) );
$users_found = $users->get_results();

Последний запрос

Результат может выглядеть следующим образом:

$search_string = esc_attr( trim( get_query_var('s') ) );
$users = new WP_User_Query( array(
    'search'         => "*{$search_string}*",
    'search_columns' => array(
        'user_login',
        'user_nicename',
        'user_email',
        'user_url',
    ),
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key'     => 'first_name',
            'value'   => $search_string,
            'compare' => 'LIKE'
        ),
        array(
            'key'     => 'last_name',
            'value'   => $search_string,
            'compare' => 'LIKE'
        )
    )
) );
$users_found = $users->get_results();

В каком файле я хочу добавить этот запрос?
Навин

@Naveen Лучше всего подойдет либо functions.phpваш шаблон, либо (что будет лучше), красиво завернутый в собственный мини-плагин, чтобы не потерять функциональность при переключении тем.
Кайзер

Kiaser спасибо за ваш ответ. Пожалуйста, помогите мне, как я могу интегрировать этот код в functions.php
Naveen

3
@ Naveen Это выходит за рамки здесь. Вам придется немного узнать о коде или найти разработчика, который сделает это за вас. И прочитал , что Q / A .
Кайзер

display_nameстолбец в wp_users. На ум приходят два вопроса. 1: это недавнее изменение в схеме базы данных? 2: это может использоваться как значение search_columnsвместо мета-запроса?
Генрирайт

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.