Я сделал mysql-запрос в WordPress следующим образом:
$querystr = " SELECT $wpdb->posts.* FROM $wpdb->posts, $wpdb->postmeta WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id AND $wpdb->postmeta.meta_key = 'where' AND $wpdb->postmeta.meta_value = 'london' LIMIT 0,50 "; $pageposts = $wpdb->get_results($querystr, OBJECT);
Таким образом я могу захватить все сообщения с meta_key = "where"
и meta_value = london
Проблема в том, что у меня также есть еще одна meta_key
, "date"
и meta_value
которая содержит настоящую дату типа "05-06-2013"
, "06-06-2013"
и т. Д.
Как я могу запросить все сообщения с мета "where" = "london"
и упорядочить по дате, используя данные, содержащиеся в метаданных "date" = "xx-xx-xxxx"
?
Хотя класс WPDB
или его глобальный экземпляр $wpdb
– ваш друг, когда дело доходит до запросов к пользовательским таблицам или основным данным WP, которые не имеют API более высокого уровня, чрезмерное использование его для запросов сообщений.
Вместо этого прочитайте WP_Query
.
В вашем случае вы будете использовать его так:
$args = array( 'posts_per_page' => 50, /* set limit to 50 */ 'post_type' => array( 'post', 'page' ), /* fetch both posts and pages */ 'meta_key' => 'date', /* garb only posts with meta_key "date" set */ 'orderby' => 'meta_value_num', /* sort by numeric value of above key */ 'order' => 'ASC', /* sot order */ 'meta_query' => array( /* grab only posts/pages w/ "london" as value for "where" */ array( 'key' => 'where', 'value' => 'london', 'compare' => '=' ) ) ); $pageposts = new WP_Query( $args ); while ( $pageposts->have_posts() ) : $pageposts->the_post(); /* output something */ endwhile; wp_reset_postdata();
Вышеуказанная сортировка по дате будет безупречно работать либо с временной строкой, либо с строковым форматом YYYY-MM-DD
.
С тем, как у вас в настоящее время есть, вам понадобится дополнительная итерация …