我一直在尝试编写一个函数,该函数允许我按照WordPress帖子的元值开始日期、结束日期以及两者之间的所有日期对其进行排序。
我已经设置了一个带有三个字段的自定义元数据库:
事件名称(IDevenement-name
)事件开始日期(IDevenement-datum-start
), 存储为事件的YY mm dd结束日期(IDevenement-datum-end
), 存储为YY-mm-dd/ul>我想要的是未来将发生的事件的列表,按年、月、日分组。
示例:
事件A发生于2013年11月24日至2013年11月26日,事件B发生于2013年11月25日,示例结果:
2013
十一月
24
事件A
25
事件A
事件B
26
事件A
不幸的是,从理论上讲,这一切听起来容易得多。
我确实设法让元盒工作,并运行查询以返回一个包含元值的帖子列表evenement-datum-end
是今天还是将来。我甚至还弄到了一份evenement-datum-start
和evenement-datum-end
, 所以我现在得到的是:
2013年11月24日-事件A
2013年11月25日-事件A
2013年11月26日-事件A
2013年11月25日-事件B
我的代码:
//This is the function I use to get all the dates between the start date and the end date:
function getDateRange($startDate, $endDate, $format="Y-m-d"){
//Create output variable
$datesArray = array();
//Calculate number of days in the range
$total_days = round(abs(strtotime($endDate) - strtotime($startDate)) / 86400, 0) + 1;
//Populate array of weekdays and counts
for($day=0; $day<$total_days; $day++)
{
$datesArray[] = date($format, strtotime("{$startDate} + {$day} days"));
}
//Return results array: de inhoud van de array wordt uitgelezen
return $datesArray;
}
//Query
$args = array (
\'cat\' => \'1,6\',
\'post_type\' => \'post\',
\'meta_key\' => \'evenement-datum-start\',
\'posts_per_page\' => -1,
\'meta_query\' => array(
array(
\'key\' => \'evenement-datum-end\',
\'value\' => date(\'Y-m-d\'),
\'compare\' => \'>=\',
\'type\' => \'DATE\'
)
),
);
$agenda_query_full = new WP_Query ( $args );
if ( $agenda_query_full->have_posts() ) {
echo \'<ul>\';
while ( $agenda_query_full->have_posts() ) {
$agenda_query_full->the_post();
$meta_event_name = get_post_meta( get_the_ID(), \'evenement-name\', true );
$meta_event_start = get_post_meta( get_the_ID(), \'evenement-datum-start\', true );
$meta_event_end = get_post_meta( get_the_ID(), \'evenement-datum-end\', true );
$dateRange = getDateRange($meta_event_start, $meta_event_end);
asort($dateRange);
$today = date(\'Y-m-d\');
foreach ($dateRange as $key => $val) {
$datum = date("d-m-Y", strtotime($val));
if($val>=$today) {
if(in_category( \'acties\' ) ){
echo \'<li>\'.$datum.\' - <a href="\' . get_page_link() . \'">\' . $meta_event_name . \'</a></li>\';
}
else {
echo \'<li>\'.$datum.\' - \' . $meta_event_name . \'</li>\';
};
};
}
}
echo \'</ul>\';
} else {
echo \'No events found.\';
}
wp_reset_postdata();
据我所知,我只是PHP的初学者,在运行循环之前,我无法查询日期列表。但当我运行循环时,我无法按时间顺序对日期进行排序,因为我已经检索到了一篇帖子。陷入僵局。
我已经为此工作了好几天了,现在我绝望了。。。有什么帮助吗?