我有一个自定义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天内发生的帖子或任何设置的天数/期间?
最合适的回答,由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 */