我对WordPress进行了如下mysql查询:
$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"
和ameta_value
包含真实日期,如"05-06-2013"
, "06-06-2013"
, 等
如何使用meta查询所有帖子"where" = "london"
并使用meta中包含的数据按日期排序"date" = "xx-xx-xxxx"
?
SO网友:Johannes Pille
而WPDB
类或其全局$wpdb
实例是您的朋友当涉及到查询没有更高级别API的自定义表或WP核心数据时,使用它来查询帖子太过分了。
相反,请阅读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
字符串格式。
按照您当前的方式,您将需要额外的迭代。。。