WP_Community_Events::trim_events()protectedWP 4.8.0

Prepares the event list for presentation.

Discards expired events, and makes WordCamps "sticky." Attendees need more advanced notice about WordCamps than they do for meetups, so camps should appear in the list sooner. If a WordCamp is coming up, the API will "stick" it in the response, even if it wouldn't otherwise appear. When that happens, the event will be at the end of the list, and will need to be moved into a higher position, so that it doesn't get trimmed off.

Метод класса: WP_Community_Events{}

Хуков нет.

Возвращает

Массив. The response body with events trimmed.

Использование

// protected - в коде основоного (родительского) или дочернего класса
$result = $this->trim_events( $events );
$events(массив) (обязательный)
The events that will be prepared.

Список изменений

С версии 4.8.0 Введена.
С версии 4.9.7 Stick a WordCamp to the final list.
С версии 5.5.2 Accepts and returns only the events, rather than an entire HTTP response.
С версии 6.0.0 Decode HTML entities from the event title.

Код WP_Community_Events::trim_events() WP 6.5.2

protected function trim_events( array $events ) {
	$future_events = array();

	foreach ( $events as $event ) {
		/*
		 * The API's `date` and `end_date` fields are in the _event's_ local timezone, but UTC is needed so
		 * it can be converted to the _user's_ local time.
		 */
		$end_time = (int) $event['end_unix_timestamp'];

		if ( time() < $end_time ) {
			// Decode HTML entities from the event title.
			$event['title'] = html_entity_decode( $event['title'], ENT_QUOTES, 'UTF-8' );

			array_push( $future_events, $event );
		}
	}

	$future_wordcamps = array_filter(
		$future_events,
		static function ( $wordcamp ) {
			return 'wordcamp' === $wordcamp['type'];
		}
	);

	$future_wordcamps    = array_values( $future_wordcamps ); // Remove gaps in indices.
	$trimmed_events      = array_slice( $future_events, 0, 3 );
	$trimmed_event_types = wp_list_pluck( $trimmed_events, 'type' );

	// Make sure the soonest upcoming WordCamp is pinned in the list.
	if ( $future_wordcamps && ! in_array( 'wordcamp', $trimmed_event_types, true ) ) {
		array_pop( $trimmed_events );
		array_push( $trimmed_events, $future_wordcamps[0] );
	}

	return $trimmed_events;
}