Не могу искать по электронной почте wordpress

Создаю форму поиска с автозаполнением. Теперь мой поиск работает по имени и фамилии. Но не по почте. Что случилось?

$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 );
0
0
138
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Попробуйте этот подход

$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.

maťo 31.10.2018 13:17

Теперь поиск работает по имени и электронной почте, но не по фамилии.

user3514052 31.10.2018 13:18

Я пробовал объединить два запроса, отдельно для first_name и last_name и отдельно для user_email. Это сработало, как я написал в своем ответе.

maťo 31.10.2018 13:23

Похоже, что если вы используете WP_User_Query, можно искать только по «ID» - поиск по идентификатору пользователя. user_login - поиск по логину пользователя. user_nicename - поиск по имени пользователя. user_email - поиск по электронной почте пользователя. user_url - поиск по URL пользователя.

r00t 31.10.2018 13:28
Ответ принят как подходящий

Электронная почта пользователя не является мета, поэтому вы не можете использовать 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 );

Другие вопросы по теме