我有一个自行车俱乐部用来安排骑行的自定义帖子类型。这些帖子有一个自定义字段,用户可以使用JQUI date&;选择“骑行日期”;时间选择器。此信息存储在Posteta中:
07/26/2012 @ 12:00 am
我通过以下方式查询这些帖子:
query_posts(array(\'posts_per_page\' => 3, \'post_type\' => \'rides\');
但我们不想看到已经发生的游乐设施:
//Format User entered ride date
$date = get_post_meta($post->ID, \'date\', true);
$date = str_replace(\' @ \', \' \', $date);
//adjust unix timestamp
$time = time() -21600;
//If ride has not already happened, print it.
if ( $time < strtotime( $date ) ):
这样做是可行的,但有一个基本缺陷,经验更丰富的PHP开发人员可能会立即看到。在我的查询中,我根据发布日期获取最后三篇帖子,然后测试元值,以查看是否已经发生了骑乘。我真正需要做的是后退一步,测试我的查询中是否已经发生了骑行。
最合适的回答,由SO网友:Stephen Harris 整理而成
我建议将日期时间存储为:
时间戳(排序/比较依据meta_value_num
)排序/比较依据:yyyy-mm-dd hh:mm(例如2012-04-11 19:37)meta_value
然后以下操作将起作用(假设您使用的是时间戳):
$now = current_time(\'timestamp\');
$args = array(
\'post_type\' => \'rides\',
\'posts_per_page\' => 3,
\'meta_query\' => array(
array(
\'key\' => \'date\',
\'value\' => $now,
\'compare\' => \'>\'
)
)
);
//This breaks pagination!
query_posts($args)
参见上的Codex
WP_Query
.
奖励积分:不要使用query_posts
! (See this). 它的效率很低,需要一些额外的工作才能使分页等正常工作。
我建议你看看这个(非常)related post 它向您展示了如何使用pre_get_posts
改为挂钩。该帖子还包括如何按自定义“日期”字段排序。