Show only a specific number of upcoming events
add_filter( 'piecal_events_array_filter', 'piecal_only_show_x_upcoming_events', 99, 5);
function piecal_only_show_x_upcoming_events( $eventsArray, $rangeStart = null, $rangeEnd = null, $appendOffset, $atts ) {
if( count($eventsArray) == 0 ) return $eventsArray;
// Sort events array by start date
usort($eventsArray, function($a, $b) {
return strtotime($a['start']) <=> strtotime($b['start']);
});
// @CONFIGURATION: Change 3 to the number of upcoming events you want to show.
$eventLimit = 3;
// Array to hold the next X events from today
$nextXEvents = [];
// Now date for use in comparison later
$today = new DateTime( 'now', new DateTimeZone( wp_timezone_string() ) );
// Loop through sorted $eventsArray
foreach( $eventsArray as $event ) {
// Check if we've reached our event limit yet
if( count($nextXEvents) < $eventLimit ) {
// Convert event start date string to Datetime for comparison
$start = new DateTime( $event['start'], new DateTimeZone( wp_timezone_string() ) );
// Check if event occurs on or after now.
if( $start >= $today ) {
$nextXEvents = [...$nextXEvents, $event];
}
}
}
return $nextXEvents;
}