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;
}
Did this answer your question? Thanks for the feedback There was a problem submitting your feedback. Please try again later.