$wpdb запрашивает тип записи в рамках определенного термина таксономии при заказе записей по пользовательскому мета-значению?
У меня есть пользовательский тип записи "событие", пользовательское мета-поле "event_date" и пользовательская таксономия "местоположения".
Я хочу запросить $wpdb для получения сообщений таким образом
- сообщения должны быть типа сообщения "событие"
- "события" должны быть связаны с определенным термином $location в таксономии "местоположения"
- результаты должны быть упорядочены по пользовательскому мета-значению 'event_date' (которое на самом деле является датой в формате yymmdd) по сравнению с сегодняшним текущая дата
Я пытаюсь использовать следующие параметры запроса (я могу правильно получить значение $location - либо ID, либо slug - и перейти к этому запросу):
SELECT $wpdb->posts.*
LEFT JOIN $wpdb->postmeta ON($wpdb->posts.ID = $wpdb->postmeta.post_id)
LEFT JOIN $wpdb->term_relationships ON($wpdb->posts.ID = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy ON($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
LEFT JOIN $wpdb->terms ON($wpdb->term_taxonomy.term_id = $wpdb->terms.term_id)
FROM $wpdb->posts, $wpdb->postmeta
WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id
AND $wpdb->terms.term_id = $location
AND $wpdb->term_taxonomy.taxonomy = 'locations'
AND $wpdb->posts.ID = $wpdb->postmeta.post_id
AND $wpdb->posts.post_type = 'event'
AND $wpdb->posts.post_status = 'publish'
AND $wpdb->postmeta.meta_key = 'event_date'
AND $wpdb->postmeta.meta_value > NOW()
ORDER BY $wpdb->postmeta.meta_value ASC
LIMIT $numberofposts
Запрос не работает; если я удалю часть СОЕДИНЕНИЯ и часть таксономии, он будет работать, упорядочивая все результаты, сравнивая мету "дата события" с датой NOW().
Я думаю, что я делаю это неправильно с частью таксономии...
Как и было рекомендовано, я попытался выполнить WP_Query, а не $wpdb запрос:
$args = array(
'post_type' => 'event',
'tax_query' => array(
array(
'taxonomy' => 'locations',
'field' => 'id',
'terms' => $location // location term id
)
),
'meta_key' => 'event_date', // this meta field stores event date in yymmdd format
'meta_value' => $today, // this would be today's date in yymmdd format
'meta_compare' => '>=',
'posts_per_page' => $numberofposts, // this variable stores the number of posts I want to get
'orderby'=> 'meta_value_num'
);
Однако в этом последнем случае запрос вернет ВСЕ записи с указанным типом post_type, независимо от любой другой спецификации в $args, включая порядок сортировки
Я пробовал использовать meta_query вместо meta_key, но результат не меняется
1 answers
У вас есть опечатка в orderby
, и meta_value_num
используется только в качестве значения orderby
, попробуйте это:
$args = array(
'post_type' => 'event',
'tax_query' => array(
array(
'taxonomy' => 'locations',
'field' => 'id',
'terms' => $location // location term id
)
),
'meta_key' => 'event_date', // this meta field stores event date in yymmdd format
'meta_value' => $today, // this would be today's date in yymmdd format
'meta_compare' => '>=',
'posts_per_page' => $numberofposts, // this variable stores the number of posts I want to get
'orderby'=> 'meta_value_num'
);