tribe_events_event_schedule_details( int|null $event = null, string $before = '', string $after = '', bool $html = true )
Return the details of the start/end date/time.
Contents
The highest level means of customizing this function’s output is simply to adjust the date format settings under Events > Settings > Display, and WordPress time formats (via the General Settings admin screen). Beyond that, however, there are two filters which can be used to exercise further control here.
The first is ‘tribe_events_event_schedule_details_formatting’ which allows an array of format settings to be altered – it’s basic make-up is as a simple set of key:value pairs as follows.
"show_end_time": for single day events only (not including all day events) it may not always be desirable to include the end time. In that situation, this setting can be set to false and the end time will not be displayed.
"time": if it is undesirable to show times and only dates should be displayed then this setting can be set to false. If it is false it will by extension cause ‘show_end_time’ to be false.
The resulting string can also be caught and manipulated, or completely overridden, using the ‘tribe_events_event_schedule_details’ filter, should none of the above settings be sufficient.
Parameters
- $event
-
(int|null) (Optional) The event post ID, or
nullto use the global event.Default value: null
- $before
-
(string) (Optional) A string to prepend before the schedule details.
Default value: ''
- $after
-
(string) (Optional) A string to append after the schedule details.
Default value: ''
- $html
-
(bool) (Optional) Whether to use HTML elements in the output string or not; defaults to
true.Default value: true
Return
(string) The human-readable event schedule details formatted according to the current settings.
Source
File: src/functions/template-tags/general.php
function tribe_events_event_schedule_details( $event = null, $before = '', $after = '' ) {
if ( is_null( $event ) ) {
global $post;
$event = $post;
}
if ( is_numeric( $event ) ) {
$event = get_post( $event );
}
$inner = '<span class="tribe-event-date-start">';
$format = '';
$date_without_year_format = tribe_get_date_format();
$date_with_year_format = tribe_get_date_format( true );
$time_format = get_option( 'time_format' );
$datetime_separator = tribe_get_option( 'dateTimeSeparator', ' @ ' );
$time_range_separator = tribe_get_option( 'timeRangeSeparator', ' - ' );
$settings = array(
'show_end_time' => true,
'time' => true,
);
$settings = wp_parse_args( apply_filters( 'tribe_events_event_schedule_details_formatting', $settings ), $settings );
if ( ! $settings['time'] ) {
$settings['show_end_time'] = false;
}
/**
* @var $show_end_time
* @var $time
*/
extract( $settings );
$format = $date_with_year_format;
/**
* If a yearless date format should be preferred.
*
* By default, this will be true if the event starts and ends in the current year.
*
* @param bool $use_yearless_format
* @param WP_Post $event
*/
$use_yearless_format = apply_filters( 'tribe_events_event_schedule_details_use_yearless_format',
(
tribe_get_start_date( $event, false, 'Y' ) === date_i18n( 'Y' )
&& tribe_get_end_date( $event, false, 'Y' ) === date_i18n( 'Y' )
),
$event
);
if ( $use_yearless_format ) {
$format = $date_without_year_format;
}
if ( tribe_event_is_multiday( $event ) ) { // multi-date event
$format2ndday = apply_filters( 'tribe_format_second_date_in_range', $format, $event );
if ( tribe_event_is_all_day( $event ) ) {
$inner .= tribe_get_start_date( $event, true, $format );
$inner .= '</span>' . $time_range_separator;
$inner .= '<span class="tribe-event-date-end">';
$end_date_full = tribe_get_end_date( $event, true, Tribe__Date_Utils::DBDATETIMEFORMAT );
$end_date_full_timestamp = strtotime( $end_date_full );
// if the end date is <= the beginning of the day, consider it the previous day
if ( $end_date_full_timestamp <= strtotime( tribe_beginning_of_day( $end_date_full ) ) ) {
$end_date = tribe_format_date( $end_date_full_timestamp - DAY_IN_SECONDS, false, $format2ndday );
} else {
$end_date = tribe_get_end_date( $event, false, $format2ndday );
}
$inner .= $end_date;
} else {
$inner .= tribe_get_start_date( $event, false, $format ) . ( $time ? $datetime_separator . tribe_get_start_date( $event, false, $time_format ) : '' );
$inner .= '</span>' . $time_range_separator;
$inner .= '<span class="tribe-event-date-end">';
$inner .= tribe_get_end_date( $event, false, $format2ndday ) . ( $time ? $datetime_separator . tribe_get_end_date( $event, false, $time_format ) : '' );
}
} elseif ( tribe_event_is_all_day( $event ) ) { // all day event
$inner .= tribe_get_start_date( $event, true, $format );
} else { // single day event
if ( tribe_get_start_date( $event, false, 'g:i A' ) === tribe_get_end_date( $event, false, 'g:i A' ) ) { // Same start/end time
$inner .= tribe_get_start_date( $event, false, $format ) . ( $time ? $datetime_separator . tribe_get_start_date( $event, false, $time_format ) : '' );
} else { // defined start/end time
$inner .= tribe_get_start_date( $event, false, $format ) . ( $time ? $datetime_separator . tribe_get_start_date( $event, false, $time_format ) : '' );
$inner .= '</span>' . ( $show_end_time ? $time_range_separator : '' );
$inner .= '<span class="tribe-event-time">';
$inner .= ( $show_end_time ? tribe_get_end_date( $event, false, $time_format ) : '' );
}
}
$inner .= '</span>';
/**
* Provides an opportunity to modify the *inner* schedule details HTML (ie before it is
* wrapped).
*
* @param string $inner_html the output HTML
* @param int $event_id post ID of the event we are interested in
*/
$inner = apply_filters( 'tribe_events_event_schedule_details_inner', $inner, $event->ID );
// Wrap the schedule text
$schedule = $before . $inner . $after;
/**
* Provides an opportunity to modify the schedule details HTML for a specific event after
* it has been wrapped in the before and after markup.
*
* @param string $schedule the output HTML
* @param int $event_id post ID of the event we are interested in
* @param string $before part of the HTML wrapper that was prepended
* @param string $after part of the HTML wrapper that was appended
*/
return apply_filters( 'tribe_events_event_schedule_details', $schedule, $event->ID, $before, $after );
}