我正在使用高级自定义字段(ACF)从事件页面提取转发器信息,并在主页上显示事件的缩短列表.
我已经设置了一个转发器,允许用户输入事件发生的月份(允许它们放入多个月的事件),然后是子转发器,允许它们为给定的月份添加多个事件.示例如下:
游行
> 3月9日活动
> 3月12日活动
> 3月28日活动
四月
> 4月1日活动
> 4月28日活动
在网站的主页上,我需要将最新的3个事件(位于列表底部的事件是最新事件)拉出并显示在主页上.
我在主页上拉动和显示事件时没有问题.我遇到的问题是显示最后三个事件(子转发器)在月份之间交叉的事件(父转发器).
简单地使用跨越if,while,语句的PHP循环限制事件输出仅限制该月输出的事件数.我目前在主页上使用的代码如下.
<?PHP if( have_rows('event_month',1263)): ?> <ul> <?PHP while ( have_rows('event_month',1263) ) : the_row(); ?> <?PHP if( have_rows('event',1263)):; ?> <?PHP while ( have_rows('event',1263) ) : the_row(); ?> <li> <h3> <a href="<?PHP echo esc_url( home_url( '/' ) ); ?>events/"><?PHP $summary = get_sub_field('event_title'); echo substr($summary,34),'...'; ?></a> <span><?PHP the_sub_field('event_day_of_week');?>,<?PHP the_sub_field('event_sub_month');?> <?PHP the_sub_field('event_day');?></span> </h3> </li> <?PHP endwhile; ?> <?PHP else: ?> <p>Show dates to be announced soon.</p><?PHP the_sub_field('event_title'); ?> <?PHP endif; ?> <?PHP endwhile; ?> </ul>
如果我们捕获三个最新事件,主页上我想要的输出会是什么样子:
> 3月28日活动
> 4月1日活动
> 4月28日活动
可能你应该用而不是用.并考虑以下算法:
1) Get the
last row from event_month
2) Count the number of events in that month
3) If the number of events are more than or equal to 3.
3.1) Get last 3 events and display them
4) Else count the number of remaing events (
3-<<events in last month>>
)4.1) Now get the second last row and repeat steps 2,3,4
因此,使用上面的逻辑,您的代码应该类似于:
<?PHP function getEvents($rows,$noOfEvents){ $resultArray = array(); if($rows && count($rows > 0)) { $events = $rows[count($rows)-1]['event']; $events = is_array($events) ? $events : array(); $eventCount = count($events); if($eventCount < $noOfEvents){ $noOfOtherEvents = $noOfEvents-$eventCount; array_pop($rows); $iterate = getEvents($rows,$noOfOtherEvents); $resultArray = array_merge($events,$iterate); } else{ $resultArray = array_slice($rows,0-$eventCount,$eventCount); } return $resultArray; } $rows = get_field('event_month',1263); if($rows) { $requiredEvents = getEvents($rows,3); //3 or how many ever last you want foreach($requiredEvents as $event){ var_dump($event); //this should have all you need like $event['event_title'],$event['event_day'],ect... } }