通过以自定义元形式查询带有时间戳的帖子,显示未来30天内即将发生的事件

时间:2011-12-02 作者:unfulvio

我有一个自定义post类型“event”,它将自定义meta存储为时间戳($event\\u date)。日期始终为dd-mm-yyyy格式,因此我可以从该键生成unix时间戳。时间戳与pubdate不匹配,它只是将来设置的任何日期。

我想做一个wp查询,列出所有即将发布的帖子(事件),即将当前时间与这些时间戳进行比较,并相应地对帖子进行排序(显示即将发布的第一个帖子,更接近当前日期)。应忽略Pubdate;如果日期不明确(如果两个事件具有相同的$event\\u date),则按字母顺序或其他顺序排列。

我还希望能够查询未来30天内发生的事件。

我打算试试这个,但我想知道是否有更好的方法,因为我不知道如何在30天内只获得预定的帖子:

query_posts(array(
    \'posts_per_page\' => 30,
        \'meta_key\' => \'event_date\',
    \'meta_value\' => date(Y-m-d), // I could use directly unix timestamps
    \'meta_compare\' => \'>\',
        \'orderby\' => \'meta_value\',
        \'order\' => \'ASC\'
));
这应该排序的职位与职位发生在未来的第一。。。然而,这并不一定意味着他们将在30天之后;假设我已经想发布60天或明年将要发生的事情。。。如何为查询设置costraint以仅显示未来30天内发生的帖子或任何设置的天数/期间?

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

我最近做了完全相同的操作,您必须使用自定义查询:

                 $date = time()-86400; /* today */
                 $querystr = "
                    SELECT $wpdb->posts.* 
                    FROM $wpdb->posts, $wpdb->postmeta
                    WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id 
                    AND $wpdb->posts.post_status = \'publish\' 
                    AND $wpdb->postmeta.meta_key = \'event_date\' 
                    AND $wpdb->postmeta.meta_value > " . $date . " 
                    ORDER BY $wpdb->postmeta.meta_value ASC
                 ";


                 $pageposts = $wpdb->get_results($querystr, OBJECT);
                 foreach ($pageposts as $post):
                 /* etcetera */
希望对你有帮助。。。

将dd/mm/yyyy更改为unix时间戳的代码:

$date = explode (\'/\',$date);
$date = $date[1].\'/\'.$date[0].\'/\'.$date[2]; // dd/mm/yyyy to mm/dd/yyyy
$date  = strtotime($date); /* UNIX TIMESTAMP */

结束

相关推荐

我如何为META_QUERY做一个变量?

我有一个需要变量比较字符串的代码array( \'key\' => \'rob_value\', \'value\' => $rob, \'compare\' => \'=\' ) 比较=>\'=\' 需要是\'=\' 根据搜索表单中的变量数据获取值,但有时值为null(空),比较行需要更改以进行比较=>\'!=\' 我已经测试过手动更改代码,效果非常好。现在我想根据