下面是我用来查询多日事件的代码。我遇到的问题是,我可以按开始日期(evstart\\u date)排序,也可以对开始日期和结束日期(evend\\u date)进行组合查询。但我无法同时执行组合查询和排序。下面的代码正确地进行了查询(继续显示过去开始但尚未结束的多日事件),但排序已中断(恢复为按发布日期进行默认排序)。
我尝试了几种不同的方法,但都找不到解决方案。
<?php
$paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
$today = date(\'Y-m-d\', strtotime(\'-6 hours\'));
$upcomingevents = new WP_Query(array(
\'post_type\' => \'events\',
\'posts_per_page\' => 6,
\'paged\' => $paged,
\'meta_query\'=>array(
\'relation\'=>\'OR\',
array(
\'key\' => \'evstart_date\',
\'value\' => $today,
\'compare\' => \'>=\',
\'type\' => \'CHAR\'
),
array(
\'key\' => \'evend_date\',
\'value\' => $today,
\'compare\' => \'>=\',
\'type\' => \'CHAR\'
)
),
\'meta_key\' => \'evstart_date\',
\'orderby\' => \'meta_value\',
\'order\' => \'ASC\'
));
?>
最合适的回答,由SO网友:Christian 整理而成
我也遇到了同样的问题,直到我意识到实际上不必按事件开始日期进行查询,只需按结束日期进行查询。
只要事件的结束日期没有超过,开始日期是否在未来就无关紧要。你所要做的就是抓取所有尚未结束的日期,然后按开始日期排序。
这应该适合您:
<?php
$paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
$today = date(\'Y-m-d\', strtotime(\'-6 hours\'));
$upcomingevents = new WP_Query(array(
\'post_type\' => \'events\',
\'posts_per_page\' => 6,
\'paged\' => $paged,
\'meta_query\'=>array(
array(
\'key\' => \'evend_date\',
\'value\' => $today,
\'compare\' => \'>=\',
\'type\' => \'CHAR\'
)
),
\'meta_key\' => \'evstart_date\',
\'orderby\' => \'meta_value\',
\'order\' => \'ASC\'
));
?>