Создаю форму поиска с автозаполнением. Теперь мой поиск работает по имени и фамилии. Но не по почте. Что случилось?
$args = array (
'order' => 'ASC',
'orderby' => 'display_name',
'search' => '*' . esc_attr( $search_term ) . '*',
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'first_name',
'value' => $search_term,
'compare' => 'LIKE'
),
array(
'key' => 'last_name',
'value' => $search_term,
'compare' => 'LIKE'
),
array(
'key' => 'user_email',
'value' => $search_term,
'compare' => 'LIKE'
)
)
);
// Create the WP_User_Query object
$wp_user_query = new WP_User_Query( $args );
Попробуйте этот подход
$args = array(
'order' => 'ASC',
'orderby' => 'display_name',
'search' => '*' . esc_attr( $search_term ) . '*',
'search_columns' => array( 'first_name', 'last_name', 'user_email' )
);
$user_query = new WP_User_Query( $args );
Подробнее о классе WP_User_Query здесь https://codex.wordpress.org/Class_Reference/WP_User_Query
Обновлено:
Доступные поля поиска
'ID' - Search by user id.
'user_login' - Search by user login.
'user_nicename' - Search by user nicename.
'user_email' - Search by user email.
'user_url' - Search by user url.
Теперь поиск работает по имени и электронной почте, но не по фамилии.
Я пробовал объединить два запроса, отдельно для first_name и last_name и отдельно для user_email. Это сработало, как я написал в своем ответе.
Похоже, что если вы используете WP_User_Query, можно искать только по «ID» - поиск по идентификатору пользователя. user_login - поиск по логину пользователя. user_nicename - поиск по имени пользователя. user_email - поиск по электронной почте пользователя. user_url - поиск по URL пользователя.
Электронная почта пользователя не является мета, поэтому вы не можете использовать meta_query. Вы можете использовать разделенный ключ массива search_columns. Если вам нужны результаты, где $ search_term содержит только один из вариантов для first_name, last_name или user_email, я нашел функциональный способ, когда объединяю два запроса (запрос для поиска по user_email и ваш исходный адаптированный запрос). Это работает для меня:
$args1 = array (
'order' => 'ASC',
'orderby' => 'display_name',
'search' => '*' . esc_attr( $search_term ) . '*',
'search_columns' => array( 'user_email' )
);
$args2 = array (
'order' => 'ASC',
'orderby' => 'display_name',
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'first_name',
'value' => $search_term,
'compare' => 'LIKE'
),
array(
'key' => 'last_name',
'value' => $search_term,
'compare' => 'LIKE'
)
)
);
$query1 = new WP_User_Query( $args1 );
$query2 = new WP_User_Query( $args2 );
$wp_user_query = new WP_User_Query();
$wp_user_query->results = array_merge( $query1->results,$query2->results );
У меня не работает. Не показывает результаты для значений мета first_name или last_name. Только для user_email.