Tribe__Events__Repositories__Event::order_by( string $order_by, string|null $order = 'ASC' )
Overrides the base method to default the order to ASC for events.
Contents
Parameters
- $order_by
-
(string) (Required) The key to order events by.
- $order
-
(string|null) (Optional) The order direction, either
ASCorDESC; defaults toASC.Default value: 'ASC'
Return
(Tribe__Repository|Tribe__Repository__Read_Interface) This repository instance.
Source
File: src/Tribe/Repositories/Event.php
public function order_by( $order_by, $order = 'ASC' ) {
/** @var \wpdb $wpdb */
global $wpdb;
$check_orderby = $order_by;
if ( ! is_array( $check_orderby ) ) {
$check_orderby = explode( ' ', $check_orderby );
}
$timestamp_key = 'TIMESTAMP(mt1.meta_value)';
$by_event_start_date = isset( $check_orderby['event_date'] ) || in_array( 'event_date', $check_orderby, true );
$by_event_start_date_utc = isset( $check_orderby['event_date_utc'] ) || in_array( 'event_date_utc', $check_orderby, true );
if ( $by_event_start_date || $by_event_start_date_utc ) {
$check_orderby = $by_event_start_date ? 'event_date' : 'event_date_utc';
$postmeta_table = "orderby_{$check_orderby}_meta";
$meta_key = '_EventStartDate';
/**
* When the "Use site timezone everywhere" option is checked in events settings,
* the UTC time for event start and end times will be used. This filter allows the
* disabling of that in certain contexts, so that local (not UTC) event times are used.
*
* @since 4.6.10
*
* @param boolean $force_local_tz Whether to force the local TZ.
*/
$force_local_tz = apply_filters( 'tribe_events_query_force_local_tz', false );
if (
$by_event_start_date_utc
|| ( ! $force_local_tz && Tribe__Events__Timezones::is_mode( 'site' ) )
) {
$meta_key .= 'UTC';
}
$this->filter_query->join( $wpdb->prepare( "
LEFT JOIN {$wpdb->postmeta} AS {$postmeta_table}
ON (
{$postmeta_table}.post_id = {$wpdb->posts}.ID
AND {$postmeta_table}.meta_key = %s
)
", $meta_key ) );
$this->filter_query->orderby( $check_orderby );
$this->filter_query->fields( "MIN( {$postmeta_table}.meta_value ) AS {$check_orderby}" );
} elseif ( isset( $check_orderby['organizer'] ) || in_array( 'organizer', $check_orderby, true ) ) {
$check_orderby = 'organizer';
$postmeta_table = "orderby_{$check_orderby}_meta";
$posts_table = "orderby_{$check_orderby}_posts";
$meta_key = '_EventOrganizerID';
$this->filter_query->join( $wpdb->prepare( "
LEFT JOIN {$wpdb->postmeta} AS {$postmeta_table}
ON (
{$postmeta_table}.post_id = {$wpdb->posts}.ID
AND {$postmeta_table}.meta_key = %s
)
LEFT JOIN {$wpdb->posts} AS {$posts_table}
ON {$wpdb->posts}.ID = {$postmeta_table}.meta_value
", $meta_key ) );
$this->filter_query->orderby( $check_orderby );
$this->filter_query->fields( "{$posts_table}.post_title AS {$check_orderby}" );
} elseif ( isset( $check_orderby['venue'] ) || in_array( 'venue', $check_orderby, true ) ) {
$check_orderby = 'venue';
$postmeta_table = "orderby_{$check_orderby}_meta";
$posts_table = "orderby_{$check_orderby}_posts";
$meta_key = '_EventVenueID';
$this->filter_query->join( $wpdb->prepare( "
LEFT JOIN {$wpdb->postmeta} AS {$postmeta_table}
ON (
{$postmeta_table}.post_id = {$wpdb->posts}.ID
AND {$postmeta_table}.meta_key = %s
)
LEFT JOIN {$wpdb->posts} AS {$posts_table}
ON {$wpdb->posts}.ID = {$postmeta_table}.meta_value
", $meta_key ) );
$this->filter_query->orderby( $check_orderby );
$this->filter_query->fields( "{$posts_table}.post_title AS {$check_orderby}" );
} elseif ( isset( $check_orderby[ $timestamp_key ] ) || in_array( $timestamp_key, $check_orderby, true ) ) {
$this->filter_query->orderby( $timestamp_key );
}
return parent::order_by( $order_by, $order );
}
Changelog
| Version | Description |
|---|---|
| 4.9.7 | Introduced. |