Поиск в главной таблице
Просто используйте 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();
functions.php
ваш шаблон, либо (что будет лучше), красиво завернутый в собственный мини-плагин, чтобы не потерять функциональность при переключении тем.display_name
столбец вwp_users
. На ум приходят два вопроса. 1: это недавнее изменение в схеме базы данных? 2: это может использоваться как значениеsearch_columns
вместо мета-запроса?Это помогло мне вместо ответа Кайзера: https://laubsterboy.com/blog/2015/07/search-wordpress-users-by-name/
Но в этом решении
$wpdb->escape($usermeta_keys)
функция сгенерировала ошибку, поэтому я просто использовал$usermeta_keys
.источник