function handle_festival_filter() { // ... (le début de la fonction avec la récupération des filtres ne change pas) $region = isset($_POST['region']) ? stripslashes(sanitize_text_field($_POST['region'])) : ''; $department_code = isset($_POST['departement']) ? sanitize_text_field($_POST['departement']) : ''; $month = isset($_POST['mois']) ? intval($_POST['mois']) : ''; $args = array( 'post_type' => 'festival', 'posts_per_page' => -1, 'meta_query' => array('relation' => 'AND'), 'orderby' => 'meta_value', 'meta_key' => 'date_debut', 'order' => 'ASC' ); // Si aucun filtre n'est appliqué, on affiche les festivals à venir if (empty($region) && empty($department_code) && empty($month)) { $args['meta_query'][] = array( 'key' => 'date_fin', 'value' => date('Ymd'), 'compare' => '>=', 'type' => 'DATE' ); } // ... (le reste de la logique de filtrage ne change pas) if (!empty($region)) { $args['meta_query'][] = array( 'key' => 'region', 'value' => $region, 'compare' => 'LIKE' ); } if (!empty($department_code)) { $args['meta_query'][] = array( 'key' => 'codedep', 'value' => $department_code, 'compare' => '=' ); } if (!empty($month)) { $year = date('Y'); $start_of_month = date('Ymd', mktime(0, 0, 0, $month, 1, $year)); $end_of_month = date('Ymt', mktime(0, 0, 0, $month, 1, $year)); $args['meta_query'][] = array('relation' => 'OR', array('key' => 'date_debut', 'value' => array($start_of_month, $end_of_month), 'compare' => 'BETWEEN', 'type' => 'DATE'), array('key' => 'date_fin', 'value' => array($start_of_month, $end_of_month), 'compare' => 'BETWEEN', 'type' => 'DATE'), array('relation' => 'AND', array('key' => 'date_debut', 'value' => $start_of_month, 'compare' => '<=', 'type' => 'DATE'), array('key' => 'date_fin', 'value' => $end_of_month, 'compare' => '>=', 'type' => 'DATE') ) ); } $query = new WP_Query($args); $festivals_by_month = []; if ($query->have_posts()) { while ($query->have_posts()) { $query->the_post(); $date_debut_obj = DateTime::createFromFormat('Ymd', get_field('date_debut')); if ($date_debut_obj) { // On groupe les festivals par mois/année $month_year = $date_debut_obj->format('F Y'); if (!isset($festivals_by_month[$month_year])) { $festivals_by_month[$month_year] = []; } $festivals_by_month[$month_year][] = get_post(); } } } wp_reset_postdata(); if (!empty($festivals_by_month)) { // On utilise les classes CSS de votre agenda actuel echo '
'; foreach ($festivals_by_month as $month_year => $festivals) { // Afficher le titre du mois echo '

' . ucfirst(date_i18n('F Y', strtotime($month_year))) . '

'; echo '
'; // Utilise la grille de votre design [cite: 127] foreach ($festivals as $post) { setup_postdata($post); $ville = get_field('ville'); $specificites = get_field('specificites'); $date_debut_obj = DateTime::createFromFormat('Ymd', get_field('date_debut')); echo '
'; // La carte de festival [cite: 132] // Le badge de date à gauche [cite: 146] if ($date_debut_obj) { echo '
'; echo '' . $date_debut_obj->format('d') . ''; echo '' . date_i18n('M', $date_debut_obj->getTimestamp()) . ''; echo '
'; } // Le contenu à droite [cite: 171] echo '
'; echo '

' . get_the_title() . '

'; echo '
'; echo '' . get_field('departement') . ''; if($specificites){ echo '' . esc_html($specificites) . ''; // Les spécificités [cite: 196] } echo '
'; echo '
'; // fin carte-contenu echo '
'; // fin festival-carte } wp_reset_postdata(); echo '
'; // fin festivals-grille } echo '
'; // fin agenda-festivals } else { echo '

Aucun festival ne correspond à votre recherche.

'; } wp_die(); }