Запросить записи по нескольким пользовательским полям

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

Я сделал два выпадающих списка, которые являются пользовательскими полями.

Пользовательское поле 1 :- отрасль

Значения пользовательского поля 1 :- финансовые_услуги, электронная_коммерция, страхование и т.д.

Пользовательское поле 2 :- основная_функциональность

Значения пользовательского поля 2 :- платформа_для_принятия_решений, аутентификация_пользователей, проверка_поставщика_данных и т.д.

И моё Имя типа поста :- провайдеры.

Теперь я хочу получить посты с несколькими пользовательскими полями.

Я попробовал этот запрос. Но он не работает.

$args = array(
    'numberposts'   => -1,
    'post_type'     => 'providers',
    'meta_query'    => array(
        'relation'      => 'AND',
        array(
            'key'       => 'industry',
            'value'     => 'financial_services',
            'compare'   => '='
        ),
        array(
            'key'       => 'primary_functionality',
            'value'     => 'platform_decision_engine',
            'compare'   => '='
        )
    )
);

Я даже пробовал с одним пользовательским полем, но это тоже не работает.

// args
$args = array(
    'numberposts'   => -1,
    'post_type'     => 'providers',
    'meta_key'      => 'industry',
    'meta_value'    => 'financial_services'
);

Я не так уж и опытен в WordPress. Я читал документацию WordPress, но ничего не работает. Я запутался в relation и compare в этом запросе.

Если вы новичок и запутались, пожалуйста, следуйте по этой ссылке

https://stackoverflow.com/questions/11068795/wordpress-get-post-based-on-meta-field-content

И

https://rudrastyh.com/wordpress/meta_query.html

Возможно, это поможет вам.

Не уверен, используете ли вы WP_Query или WP_Meta_Query, но это не должно иметь значения.

$args = array(
    'numberposts'   => -1,
    'post_type'     => 'providers',
    'meta_query'    => array(
        'relation'      => 'OR',
        array(
            'key'       => 'industry',
            'value'     => 'financial_services',
            'compare'   => '='
        ),
        array('relation' => 'AND',
            array(
            'key'       => 'primary_functionality',
            'value'     => 'platform_decision_engine',
            'compare'   => '='
) ) ) );

Смотрите вложенные массивы

relation принимает значения AND и OR и указывает запросу как вы хотите фильтровать несколько мета-запросов, в то время как compare определяет, является ли каждый мета-запрос истинным. Так что в вашем запросе:

$args = array(
    'numberposts'   => -1,
    'post_type'     => 'providers',
    'meta_query'    => array(
        'relation'      => 'AND',
        array(
            'key'       => 'industry',
            'value'     => 'financial_services',
            'compare'   => '='
        ),
        array(
            'key'       => 'primary_functionality',
            'value'     => 'platform_decision_engine',
            'compare'   => '='
        )
    )
);

Вы говорите, что ищете провайдеров, у которых industry установлено на financial_services и их primary_functionality установлено на platform_decision_engine. Если это не работает, это может быть связано с тем, что нет провайдеров с обоими этими настройками провайдер с этими настройками может быть сохранён со значением не как строка, а как массив строк, поэтому = не находит точное соответствие. Я предполагаю, что это последнее, потому что вы уже показали, что существует несколько разных возможных значений. Так что, возможно, попробуйте что-то вроде этого:

$args = array(
    'numberposts'   => -1,
    'post_type'     => 'providers',
    'meta_query'    => array(
        'relation'      => 'AND',
        array(
            'key'       => 'industry',
            'value'     => array('financial_services'),
            'compare'   => 'IN'
        ),
        array(
            'key'       => 'primary_functionality',
            'value'     => array('platform_decision_engine'),
            'compare'   => 'IN'
        )
    )
);

Вы можете ознакомиться с кодексом WordPress для получения дополнительной информации о возможных значениях для compare здесь.

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

Запрос Постов по Нескольким Пользовательским Полям в WordPress

Введение

Работа с пользовательскими полями в WordPress может быть сложной задачей, особенно для новичков. Ваша цель – извлечь посты типа ‘providers’ по нескольким пользовательским полям, таким как industry и primary_functionality. Давайте разберёмся, как правильно сформулировать запрос для достижения желаемого результата.

Проблема

На основании вашего запроса, вы пытаетесь использовать WP_Query для получения постов, но это не работает. Основные трудности тут могут заключаться в неправильной структуре запросов или в типах значений, которые вы хотите извлечь. Я рассмотрю оба подхода, чтобы помочь вам выделить причину и обеспечить правильное решение.

Основные параметры запроса

Для выполнения запроса, который будет работать правильно, вам необходимо учитывать следующие аспекты:

  1. Структура массива meta_query: Ваша структура должна быть правильно оформлена, чтобы указать отношения между условиями.
  2. Сравнение значений с помощью compare: Важно использовать правильный метод сравнения, учитывая, что ваши пользовательские поля могут быть сохранены как строки или массивы строк.
  3. Проверка наличия значений: Убедитесь, что посты со значениями, которые вы запрашиваете, фактически существуют в базе данных.

Пример корректного запроса

Ниже представлен пример корректно оформленного запроса, который ищет посты по указанным пользовательским полям:

$args = array(
    'posts_per_page' => -1,
    'post_type' => 'providers',
    'meta_query' => array(
        'relation' => 'AND',
        array(
            'key' => 'industry',
            'value' => array('financial_services'), // Используйте массив, если возможные значения - это массив
            'compare' => 'IN' // 'IN' позволяет искать по списку значений
        ),
        array(
            'key' => 'primary_functionality',
            'value' => array('platform_decision_engine'), // Аналогично
            'compare' => 'IN'
        )
    )
);

Объяснение ключевых моментов

  • relation: Устанавливает, как должны комбинироваться условия. AND означает, что оба условия должны быть выполнены.
  • compare: Используя IN, вы можете проверить наличие значения в массиве. Это полезно, если поле хранит несколько значений.
  • numberposts: Это устаревший параметр; рекомендуется использовать posts_per_page.

Возможные ошибки

  1. Неожиданное значение в БД: Если ваши поля сохранены как массивы, использование = приведет к ошибке, если значение не совпадает ровно.
  2. Проблемы с кэшированием: Если вы вносили изменения в данные, убедитесь, что кэш очищен, чтобы результаты были актуальными.
  3. Отсутствие постов: Убедитесь, что в базе данных есть посты с точными заданными значениями.

Полезные ссылки

Для дальнейшего изучения и улучшения понимания, рекомендуем ознакомиться с официальной документацией:

Заключение

Следуя приведённым рекомендациям, вы сможете эффективно извлекать посты по нескольким пользовательским полям в WordPress. Убедитесь, что вы проверили правильность настроек сохранения данных и структуру ваших запросов. Для достижения оптимальных результатов желательно экспериментировать и проверять значения в базе данных, что поможет лучше понять, как работают пользовательские поля.

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

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