Retirer les conditions par défaut de « The Event Calendar »

Si l’on souhaite afficher les prochains évènements avec le plugin :

The Event Calendar

Vous aurez bien les prochains èvenements entre « maintenant » et M+1.

 

Seulement voilà, « maintenant » pour moi c’est le jour J. Par exemple aujourd’hui nous sommes le ’23/05/2016′. Mais la requête par défaut est basé sur l’heure. Si votre évènement est à midi, à 13h elle aura disparu de votre page.

Pour ce faire nous allons supprimer la requête par défaut et paramétrer la notre :

(On en profite pour supprimer posts_orderby et posts_fields afin d’alléger la requête)

/**
* Supprime les conditions par défaut
* Permet que l'évènement du jour reste toute la journée et ne disparaisse pas après l'heure de début
*/
function ctw_tribe_remove_posts_where_filter( $query ) {
	global $wp;
	/**
	* La première condition permet de savoir si nous sommes en front_page, car la fonction is_front_page() n'est pas encore affecté
	* @source http://www.wpaustralia.org/wordpress-forums/topic/pre_get_posts-and-is_front_page/
	*/
	if ( add_query_arg( $wp->query_string, '', home_url( $wp->request ) ) == get_home_url() 
		&& $query->tribe_is_event ){
			remove_filter( 'posts_fields', array( 'Tribe__Events__Query', 'posts_fields' ), 10 );
			remove_filter( 'posts_where', array( 'Tribe__Events__Query', 'posts_where' ), 10 );
			remove_filter( 'posts_orderby', array( 'Tribe__Events__Query', 'posts_orderby' ), 10 );
	}
}
add_action( 'pre_get_posts', 'ctw_tribe_remove_posts_where_filter', 99 );
Remove post_where dof

Ensuite il nous faut remplacer la condition suivante avant notre template :

(Il est aussi possible d’utiliser le hook pre_get_posts afin de paramétrer une requête principale)

/**
* Requête pour les évènement d'aujourd'hui à M+1
*/
$date = new DateTime( null, new DateTimeZone('Europe/Paris') );
$interval = new DateInterval('P1M'); // Ajout 1 Mois à la date du jour
$date->add($interval);
$args = array(
		'post_type' 	=> 'tribe_events',
		'orderby'	=> '_EventStartDate',
		'order'		=> 'ASC',
		'post_status'	=> 'publish',
		'meta_query'	=> array(
					array(
						'key' => '_EventEndDate',
						'value' => array(date_i18n( 'Y-m-d' ), $date->format('Y-m-d')),
						'compare' => 'BETWEEN',
						'type' => 'DATE'
					)
				)
	);
$query = new WP_Query( $args );
Requête tribe_events

 

Vous noterez la manière particulière de réaliser des conditions avec les meta_value.

 


Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *