Tribe__Events__Query::getEventCounts( array $args = array() )
Gets the event counts for individual days.
Contents
Parameters
- $args
-
(array) (Optional)
Default value: array()
Return
(array) The counts array.
Source
File: src/Tribe/Query.php
public static function getEventCounts( $args = array() ) {
_deprecated_function( __METHOD__, '3.10.1' );
global $wpdb;
$date = date( 'Y-m-d' );
$defaults = array(
'post_type' => Tribe__Events__Main::POSTTYPE,
'start_date' => tribe_beginning_of_day( $date ),
'end_date' => tribe_end_of_day( $date ),
'display_type' => 'daily',
'hide_upcoming_ids' => null,
);
$args = wp_parse_args( $args, $defaults );
$args['posts_per_page'] = - 1;
$args['fields'] = 'ids';
// remove empty args and sort by key, this increases chance of a cache hit
$args = array_filter( $args, array( __CLASS__, 'filter_args' ) );
ksort( $args );
/** @var Tribe__Cache $cache */
$cache = tribe( 'cache' );
$cache_key = 'daily_counts_and_ids_' . serialize( $args );
$found = $cache->get( $cache_key, 'save_post' );
if ( $found ) {
return $found;
}
$cache_key = 'month_post_ids_' . serialize( $args );
$found = $cache->get( $cache_key, 'save_post' );
if ( $found && is_array( $found ) ) {
$post_ids = $found;
} else {
$post_id_query = new WP_Query();
$post_ids = $post_id_query->query( $args );
$cache->set( $cache_key, $post_ids, Tribe__Cache::NON_PERSISTENT, 'save_post' );
}
$counts = array();
$event_ids = array();
if ( ! empty( $post_ids ) ) {
switch ( $args['display_type'] ) {
case 'daily':
default :
$wp_query = tribe_get_global_query_object();
$output_date_format = '%Y-%m-%d %H:%i:%s';
$start_date_sql = esc_sql( $post_id_query->query_vars['start_date'] );
$end_date_sql = esc_sql( $post_id_query->query_vars['end_date'] );
$sql_ids = esc_sql( implode( ',', array_map( 'intval', $post_ids ) ) );
$raw_counts = $wpdb->get_results( "
SELECT tribe_event_start.post_id as ID,
tribe_event_start.meta_value as EventStartDate,
DATE_FORMAT( tribe_event_end_date.meta_value, '{$output_date_format}') as EventEndDate,
{$wpdb->posts}.menu_order as menu_order
FROM $wpdb->postmeta AS tribe_event_start
LEFT JOIN $wpdb->posts ON (tribe_event_start.post_id = {$wpdb->posts}.ID)
LEFT JOIN $wpdb->postmeta as tribe_event_end_date ON ( tribe_event_start.post_id = tribe_event_end_date.post_id AND tribe_event_end_date.meta_key = '_EventEndDate' )
WHERE tribe_event_start.meta_key = '_EventStartDate'
AND tribe_event_start.post_id IN ( {$sql_ids} )
AND (
(
tribe_event_start.meta_value >= '{$start_date_sql}'
AND tribe_event_start.meta_value <= '{$end_date_sql}'
)
OR (
tribe_event_end_date.meta_value >= '{$start_date_sql}'
AND tribe_event_end_date.meta_value <= '{$end_date_sql}'
)
OR (
tribe_event_start.meta_value < '{$start_date_sql}'
AND tribe_event_end_date.meta_value > '{$end_date_sql}'
)
)
ORDER BY menu_order ASC, DATE(tribe_event_start.meta_value) ASC, TIME(tribe_event_start.meta_value) ASC;"
);
$start_date = new DateTime( $post_id_query->query_vars['start_date'] );
$end_date = new DateTime( $post_id_query->query_vars['end_date'] );
$days = Tribe__Date_Utils::date_diff( $start_date->format( 'Y-m-d' ), $end_date->format( 'Y-m-d' ) );
$term_id = isset( $wp_query->query_vars[ Tribe__Events__Main::TAXONOMY ] ) ? $wp_query->query_vars[ Tribe__Events__Main::TAXONOMY ] : null;
$terms = array();
if ( is_int( $term_id ) ) {
$terms[0] = $term_id;
} elseif ( is_string( $term_id ) ) {
$term = get_term_by( 'slug', $term_id, Tribe__Events__Main::TAXONOMY );
if ( $term ) {
$terms[0] = $term->term_id;
}
}
if ( ! empty( $terms ) && is_tax( Tribe__Events__Main::TAXONOMY ) ) {
$terms = array_merge( $terms, get_term_children( $terms[0], Tribe__Events__Main::TAXONOMY ) );
}
for ( $i = 0, $date = $start_date; $i <= $days; $i ++, $date->modify( '+1 day' ) ) {
$formatted_date = $date->format( 'Y-m-d' );
$count = 0;
$_day_event_ids = array();
foreach ( $raw_counts as $record ) {
$event = new stdClass;
$event->EventStartDate = $record->EventStartDate;
$event->EventEndDate = $record->EventEndDate;
$per_day_limit = apply_filters( 'tribe_events_month_day_limit', tribe_get_option( 'monthEventAmount', '3' ) );
if ( tribe_event_is_on_date( $formatted_date, $event ) ) {
if ( ! empty ( $terms ) && ! has_term( $terms, Tribe__Events__Main::TAXONOMY, $record->ID ) ) {
continue;
}
if ( count( $_day_event_ids ) < $per_day_limit ) {
$_day_event_ids[] = $record->ID;
}
$count ++;
}
}
$event_ids[ $formatted_date ] = $_day_event_ids;
$counts[ $formatted_date ] = $count;
}
break;
}
// get a unique list of the event IDs that will be displayed, and update all their postmeta and term caches at once
$final_event_ids = call_user_func_array( 'array_merge', $event_ids );
$final_event_ids = array_unique( $final_event_ids );
update_object_term_cache( $final_event_ids, Tribe__Events__Main::POSTTYPE );
update_postmeta_cache( $final_event_ids );
}
// return IDs per day and total counts per day
$return = array( 'counts' => $counts, 'event_ids' => $event_ids );
/** @var Tribe__Cache $cache */
$cache = tribe( 'cache' );
$cache_key = 'daily_counts_and_ids_' . serialize( $args );
$cache->set( $cache_key, $return, Tribe__Cache::NON_PERSISTENT, 'save_post' );
return $return;
}