QUERY_POSTS、ORDERBY META_VALUE和打印“未来”帖子

时间:2012-04-11 作者:Justin W Hall

我有一个自行车俱乐部用来安排骑行的自定义帖子类型。这些帖子有一个自定义字段,用户可以使用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开发人员可能会立即看到。在我的查询中,我根据发布日期获取最后三篇帖子,然后测试元值,以查看是否已经发生了骑乘。我真正需要做的是后退一步,测试我的查询中是否已经发生了骑行。

1 个回复
最合适的回答,由SO网友:Stephen Harris 整理而成

我建议将日期时间存储为:

时间戳(排序/比较依据meta_value_num)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)
参见上的CodexWP_Query.

奖励积分:不要使用query_posts! (See this). 它的效率很低,需要一些额外的工作才能使分页等正常工作。

我建议你看看这个(非常)related post 它向您展示了如何使用pre_get_posts 改为挂钩。该帖子还包括如何按自定义“日期”字段排序。

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post