是否使用WP_QUERY使用日期重新查询和排序结果?

时间:2015-01-28 作者:Bysander

我正在编写一个函数来按时间顺序查找用户下一个即将到来的事件(存储为CPT)。

如果我使用普通查询并执行以下操作

\'post_type\' => \'ticket\', // another CPT set up to act as ticket 
\'orderby\'   => \'meta_value_num\',
\'meta_key\'  => \'event_date\', // currently just Ymd but can be changed to unix / whatever if neccesary.
\'order\'     => \'ASC\',
\'posts_per_page\' => 1, // changing to -1 to get all tickets 
\'meta_query\' => array(
    array(
        \'key\'   => \'member\',
        \'value\' => $user_id //user ID stored as meta on ticket CPT
    ),
    array(
         \'key\'   => \'state\',
         \'value\' => \'complete\' // to make sure is a confirmed & paid ticket
    )
)
这将找到ticket 按时间顺序排列的列表中最后一个帖子类型,即“最未来”事件。

然后我想做的是对结果进行筛选,以删除今天之前的所有票证(我以前使用过if$event_date >= date("Ymd") )

然后根据这些结果使用相反的或单独的orderby 获取第一个即将到来的活动。

如果您需要更多信息,请发表评论。很高兴粘贴您认为需要的任何额外代码。

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

感谢您的回复,

允许我找到我在下面发布的正确答案-

$tickets_for_user = get_posts(array(
                                        \'post_type\' => \'ticket\',
                                        \'orderby\' => \'meta_value_num\',
                                        \'meta_key\' => \'event_date\',
                                        \'order\' => \'ASC\',
                                        \'posts_per_page\' => 1,
                                        \'meta_query\' => array(
                                                              \'relation\' => \'AND\',
                                                              array(
                                                                    \'key\' => \'event_date\',
                                                                    \'value\' => array($today,\'20991231\'),
                                                                    \'compare\' => \'BETWEEN\',
                                                                    \'type\' => \'DATE\',
                                                                    ),
                                                              array(
                                                                    \'key\' => \'member\',
                                                                    \'value\' => $user_id
                                                                    ),
                                                              array(
                                                                    \'key\' => \'state\',
                                                                    \'value\' => \'complete\'
                                                                    ),
                                                              )
                                        ));

    $tickets = array();
    foreach($tickets_for_user as $ticket) {

Important note from the Codex:

仅当日期以YYYYMMDD格式存储并使用此格式测试时,“type”日期才与“compare”值一起使用。

您还必须将日期按顺序排列,最早的日期排在第一位。

结束

相关推荐

自定义发布类型‘Pre_[CPT]_Query’挂钩

查询wordpress用户表时,是否可以使用\'pre_user_query\' 在对数据库执行之前对SQL查询进行ammend。对于每个注册的自定义帖子类型,是否有等效的钩子方法?我正在使用posts 2 posts 链接两组自定义帖子类型。我想在每个帖子的基本查询中包含p2p链接数量的详细信息,以便我可以根据链接数量进行页面设置。