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.


Parameters

$order_by

(string) (Required) The key to order events by.

$order

(string|null) (Optional) The order direction, either ASC or DESC; defaults to ASC.

Default value: 'ASC'


Top ↑

Return

(Tribe__Repository|Tribe__Repository__Read_Interface) This repository instance.


Top ↑

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 );
	}

Top ↑

Changelog

Changelog
Version Description
4.9.7 Introduced.