У меня есть пользовательский тип записи "Листинг", и я хочу получить все списки, которые имеют настраиваемое поле gateway_value != 'Yes'
, и упорядочить результаты по другому настраиваемому полю location_level1_value
. Я могу заставить запросы работать отдельно, но не могу их объединить:
Запрос 1 (сортировка по местоположению):
$wp_query = new WP_Query( array (
'post_type' => 'listing',
'post_status' => 'publish',
'posts_per_page' => '9',
'meta_key' => 'location_level1_value',
'orderby' => 'location_level1_value',
'order' => 'ASC',
'paged' => $paged
)
);
Запрос 2 (значение настраиваемого поля! = Да):
$wp_query = new WP_Query( array (
'post_type' => 'listing',
'posts_per_page' => '9',
'post_status' => 'publish',
'meta_key' => 'gateway_value',
'meta_value' => 'Yes',
'meta_compare' => '!=',
'paged' => $paged
)
);
Комбинированный запрос:
Я посмотрел на кодекс за помощью в этом, но следующий запрос не работает:
$wp_query = new WP_Query( array (
'post_type' => 'listing',
'posts_per_page' => '9',
'post_status' => 'publish',
'meta_query' => array(
array(
'key' => 'gateway_value',
'value' => 'Yes',
'compare' => '!='
),
array(
'key' => 'location_level1_value'
)
),
'orderby' => "location_level1_value",
'order' => 'ASC',
'paged' => $paged
)
);
Что я делаю не так с комбинированным запросом?
[ОБНОВЛЕНИЕ]: так что теперь, когда 3.1 был выпущен, комбинированный запрос все еще не работает. Я получаю результаты, но не отсортирован правильно.
[ОБНОВЛЕНИЕ]: var_dump($wp_query->request)
дает следующее:
string(527) " SELECT SQL_CALC_FOUND_ROWS wp_7v1oev_posts.* FROM wp_7v1oev_posts
INNER JOIN wp_7v1oev_postmeta ON (wp_7v1oev_posts.ID = wp_7v1oev_postmeta.post_id)
INNER JOIN wp_7v1oev_postmeta AS mt1 ON (wp_7v1oev_posts.ID = mt1.post_id) WHERE 1=1 AND wp_7v1oev_posts.post_type = 'listing' AND (wp_7v1oev_posts.post_status = 'publish') AND wp_7v1oev_postmeta.meta_key = 'gateway_value' AND CAST(wp_7v1oev_postmeta.meta_value AS CHAR) != 'Yes' AND mt1.meta_key = 'location_level1_value' ORDER BY wp_7v1oev_posts.post_date DESC LIMIT 0, 9"
источник
meta_query
Параметр нового в версии 3.1, который должен быть выпущен очень скоро, но текущая версия стабильной остается 3.0.5, без этого параметра.Ответы:
Вы можете использовать запрос для фильтрации содержимого, как вы предполагали, используя «meta_query» с параметрами фильтрации, а для части заказа просто добавьте / измените следующие параметры:
'order' => 'ASC'
источник
Как сказал Ян в новой версии WordPress 3.1, вы можете использовать ее,
meta_query
но пока она не появится, вы можете использовать свой первый запрос для упорядочивания и фильтрации внутри цикла следующим образом:и добавьте этот код в ваши functions.php
теперь это должно работать.
источник
gateway_value == "Yes"
бы без условных ... Есть идеи, как это исправить?Извиняюсь за ответ на свой вопрос:
Глядя на [http://core.trac.wordpress.org/ticket/15031][1], кажется, что это известная проблема. Я исправил (взломал?), Чтобы он работал, используя
post_filter
вот так (просто для справки, кто может искать тот же ответ):В functions.php ###
Изменен wp_query в файле шаблона ###
источник