Вопрос или проблема
Я сделал два выпадающих списка, которые являются пользовательскими полями.
Пользовательское поле 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
для получения постов, но это не работает. Основные трудности тут могут заключаться в неправильной структуре запросов или в типах значений, которые вы хотите извлечь. Я рассмотрю оба подхода, чтобы помочь вам выделить причину и обеспечить правильное решение.
Основные параметры запроса
Для выполнения запроса, который будет работать правильно, вам необходимо учитывать следующие аспекты:
- Структура массива
meta_query
: Ваша структура должна быть правильно оформлена, чтобы указать отношения между условиями. - Сравнение значений с помощью
compare
: Важно использовать правильный метод сравнения, учитывая, что ваши пользовательские поля могут быть сохранены как строки или массивы строк. - Проверка наличия значений: Убедитесь, что посты со значениями, которые вы запрашиваете, фактически существуют в базе данных.
Пример корректного запроса
Ниже представлен пример корректно оформленного запроса, который ищет посты по указанным пользовательским полям:
$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
.
Возможные ошибки
- Неожиданное значение в БД: Если ваши поля сохранены как массивы, использование
=
приведет к ошибке, если значение не совпадает ровно. - Проблемы с кэшированием: Если вы вносили изменения в данные, убедитесь, что кэш очищен, чтобы результаты были актуальными.
- Отсутствие постов: Убедитесь, что в базе данных есть посты с точными заданными значениями.
Полезные ссылки
Для дальнейшего изучения и улучшения понимания, рекомендуем ознакомиться с официальной документацией:
Заключение
Следуя приведённым рекомендациям, вы сможете эффективно извлекать посты по нескольким пользовательским полям в WordPress. Убедитесь, что вы проверили правильность настроек сохранения данных и структуру ваших запросов. Для достижения оптимальных результатов желательно экспериментировать и проверять значения в базе данных, что поможет лучше понять, как работают пользовательские поля.