/**
* Filtro de segurança: força o SQL final a respeitar o dia único estrito.
* Isso garante que, mesmo que o TEC V2 tente injetar a lógica de
* "eventos em andamento" em outro hook, o SQL final só retornará eventos
* cujo _EventStartDate esteja dentro das 24h do dia selecionado.
*/
add_filter( 'posts_clauses', 'tec_v2_forcar_dia_unico_sql', 999, 2 );
function tec_v2_forcar_dia_unico_sql( $clauses, $query ) {
// Só aplica na query de eventos do TEC (front-end e AJAX)
if ( is_admin() && ! wp_doing_ajax() ) return $clauses;
if ( is_singular( 'tribe_events' ) ) return $clauses;
$post_type = $query->get('post_type');
if ( empty($post_type) || $post_type !== 'tribe_events' ) {
return $clauses;
}
// Detectar data alvo (barra nativa ou REST/AJAX)
$data_alvo = '';
if ( !empty( $_GET['tribe-bar-date'] ) ) {
$data_alvo = sanitize_text_field( $_GET['tribe-bar-date'] );
} elseif ( !empty( $_GET['event_date'] ) ) {
$data_alvo = sanitize_text_field( $_GET['event_date'] );
}
if ( empty($data_alvo) || !preg_match('/^(\d{4}-\d{2}-\d{2})/', $data_alvo, $matches) ) {
return $clauses;
}
global $wpdb;
$data_limpa = $matches[1];
$inicio = $data_limpa . ' 00:00:00';
$fim = $data_limpa . ' 23:59:59';
// Subquery de segurança: garante que o post tenha _EventStartDate no dia exato
$clauses['where'] .= $wpdb->prepare(
" AND {$wpdb->posts}.ID IN (
SELECT post_id FROM {$wpdb->postmeta}
WHERE meta_key = '_EventStartDate'
AND meta_value BETWEEN %s AND %s
) ",
$inicio, $fim
);
return $clauses;
}