cliff
3/15/2017 - 10:06 AM

Limit Slider Revolution's WP_Query to only include Featured Events that have a featured image

Limit Slider Revolution's WP_Query to only include Featured Events that have a featured image

<?php
/**
 * Limit Slider Revolution's WP_Query to only include Featured Events that have a featured image
 *
 * @link https://theeventscalendar.com/knowledgebase/featured-events/
 *
 * From https://gist.github.com/cliffordp/30ac2152a8264ef27235b46b7d16332d
 * Similar code for Essential Grid: https://gist.github.com/cliffordp/a6aad3c60f469970b1ecb209d85ec755
 * Same Slider Revolution code except without requirement for being a Featured Event (works for more than just The Events Calendar): https://gist.github.com/cliffordp/9f0d7cc5e86b2a721cd646d953bb1261
 *
 * revslider_get_posts filter is from /wp-content/plugins/revslider/includes/framework/functions-wordpress.class.php as of version 4.5.0
 *
 * Filter hook only applies to Slider Revolution > Post-Based Slider > Fetch Posts By Categories & Tags
 * or Slider Revolution > Post-Based Slider > Specific Posts > Specific Posts List (CSV of Post IDs)
 *
 * @return array
 */
function revslider_post_based_featured_events_w_featured_image( $query, $slider_id ) {

	/*
	 * YOU MUST CHANGE THESE
	 * TO YOUR OWN SLIDER REVOLUTION
	 * SLIDER IDs
	 * !!!
	 */
	$slider_ids_to_affect = array( 2, 20, 34 ); // include IDs of sliders to affect

	// if this slider is not one to affect, do no filtering
	if ( ! in_array( $slider_id, $slider_ids_to_affect ) ) {
		return $query;
	}


	// get the existing meta_query so we aren't wiping that out
    if ( ! empty( $query['meta_query'] ) ) {
	    $meta_query = (array) $query[ 'meta_query' ];
    } else {
	    $meta_query = array();
    }

	// do the filtering...

	// has a Featured Image
	$meta_query[] = array(
		'key' => '_thumbnail_id',
		'compare' => 'EXISTS',
	);

	// is a Featured Event (requires The Events Calendar version 4.4+ from January 9, 2017)
	if ( class_exists( 'Tribe__Events__Main' )
         && class_exists( 'Tribe__Events__Featured_Events' )
         && Tribe__Events__Main::POSTTYPE === $query['post_type']
    ) {
		$meta_query[] = array(
			'key'     => Tribe__Events__Featured_Events::FEATURED_EVENT_KEY,
			'compare' => 'EXISTS',
		);
    }

	$query['meta_query'] = $meta_query;

	return $query;
}

add_filter( 'revslider_get_posts', 'revslider_post_based_featured_events_w_featured_image', 10, 2 );