Wp_user_query поиск по meta_key не возвращает никаких результатов

Вопрос или проблема

У меня есть форма поиска, и я пытаюсь сделать так, чтобы она могла искать как по основным полям пользователей (user_email, display_name и т.д.), так и по другому пользовательскому мета-ключу под названием “clinic”

Вот аргументы, которые у меня есть на данный момент

$args  = array( 
        'orderby'        => 'display_name',                 
        'meta_key'       => 'course',
        'fields'         => 'all',
        'search'         => $search,
        'meta_query' => array(
        array(
            'key' => 'clinic',
            'value' => $search,
            'compare' => 'LIKE'
        )
    )
);

Также, не уверен, правильно ли я это настроил, но мне также нужно, чтобы запрос проверял, существует ли мета-ключ “course”, независимо от его значения (но это вторично и может быть удалено, если это может вызвать проблемы, меня в основном беспокоит поиск по мета-ключу clinic)

Вы устанавливаете два разных поля meta_key для проверки: 'course' и 'clinic'. Попробуйте сделать это с одним, так:

$args = array(
    'orderby' => 'display_name',
    'fields'  => 'all',
    'search'  => $search,
    'meta_query' => array(
            array(
                'key'     => 'clinic',
                'value'   => $search,
                'compare' => 'LIKE'
            )
    )
 );

То, что делает ваш текущий запрос, — это возвращает пользователей, которые соответствуют параметру $search по основным столбцам пользователей И мета-ключу “clinic”. Это ваше намерение?

Обновление 24.03.16:

Попробуйте это:

$args = array(
    'orderby'    => 'display_name',
    'fields'     => 'all',    
    'search'     => $search,
    'meta_query' => array(
        'relation' => 'OR',
            array(
                'key'     => 'course',
                'value'   => $search,
                'compare' => 'LIKE'
            ),
            array(
                'key'     => 'clinic',
                'value'   => $search,
                'compare' => 'LIKE'
            )
    )
);

Ответ или решение

Когда вы сталкиваетесь с проблемой при выполнении запроса в WordPress с помощью WP_User_Query, когда meta_key не возвращает ожидаемые результаты, необходимо исследовать детали вашего запроса. В данном случае вы хотите производить поиск пользователей, основываясь как на стандартных полях, так и на пользовательском метаполе, названном "clinic". Давайте разберемся в этом вопросе поэтапно.

1. Структура вашего запроса

В вашем исходном коде вы указали два параметра meta_key — на course и на clinic. Однако WP_User_Query поддерживает только один meta_key для каждого запроса, что может быть причиной, по которой вы не получаете ожидаемых результатов.

Вот правильная структура для вашего запроса:

$args = array(
    'orderby' => 'display_name',
    'fields' => 'all',
    'search' => '*' . esc_sql($search) . '*', // Добавьте символы % для LIKE-запроса
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key'     => 'course',
            'value'   => $search,
            'compare' => 'LIKE'
        ),
        array(
            'key'     => 'clinic',
            'value'   => $search,
            'compare' => 'LIKE'
        )
    )
);

2. Поиск с использованием LIKE

Обратите внимание, что для поиска с использованием LIKE необходимо обернуть искомое значение в символы %. В этом случае вы можете использовать esc_sql для предотвращения SQL-инъекций, добавив символы * в начале и в конце значения поиска. Таким образом, функция search будет искать в любом месте строки.

3. Проверка существования метаполя

Если вы также хотите убедиться, что метаполе course существует (без учета его значения), вы можете добавить дополнительный аргумент в массив meta_query, используя EXISTS:

$args = array(
    'orderby' => 'display_name',
    'fields' => 'all',
    'search' => '*' . esc_sql($search) . '*',
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key'     => 'course',
            'compare' => 'EXISTS' // Проверка, существует ли поле
        ),
        array(
            'key'     => 'clinic',
            'value'   => $search,
            'compare' => 'LIKE'
        )
    )
);

4. Проверка и отладка

Если проблема остается, проверьте следующее:

  • Наличие данных: Убедитесь, что метаполя действительно существуют и содержат данные, соответствующие вашему критерию поиска.
  • Кэширование: Убедитесь, что вы очищаете кэш (если используется) после изменения метаданных.
  • Проверка ошибок: Используйте функции отладки, например print_r или var_dump, для проверки содержимого переменной $args перед выполнением запроса.

Заключение

Правильная конфигурация запроса WP_User_Query необходима для успешного поиска пользователей по метаполям. Используйте указанные рекомендации, чтобы улучшить производительность вашего поиска. Также не забывайте о безопасности вашего кода. Хорошо продуманный подход не только улучшит пользовательский опыт, но и повысит производительность вашего веб-приложения.

Если у вас есть дополнительные вопросы или вы хотите подробнее рассмотреть какую-либо из указанных тем, не стесняйтесь спрашивать!

Оцените материал
Добавить комментарий

Капча загружается...