?AlkantarClanX12

Your IP : 216.73.217.134


Current Path : /home/rankinh/saintgilleslesbains-bis/wp-content/themes/divi-child/inc/shortcodes/
Upload File :
Current File : /home/rankinh/saintgilleslesbains-bis/wp-content/themes/divi-child/inc/shortcodes/agenda.php

<?php
/**
 * Shortcode [sglb_home_agenda]
 * Affiche un bloc d'introduction et un slider des prochains événements.
 */

add_shortcode('sglb_home_agenda', function() {
    // 1. Configuration de la requête
    $args = array(
        'post_type'      => 'sglb_event',
        'posts_per_page' => 8,
        'meta_key'       => '_sglb_event_date_start',
        'orderby'        => 'meta_value',
        'order'          => 'ASC',
        'meta_query'     => array(
            array(
                'key'     => '_sglb_event_date_start',
                'value'   => date('Y-m-d'),
                'compare' => '>=', // Uniquement les événements à venir
                'type'    => 'DATE'
            )
        )
    );

    $query = new WP_Query($args);

    if ( ! $query->have_posts() ) {
        return '<p style="text-align:center; padding:20px;">Aucun événement prévu prochainement.</p>';
    }

    ob_start(); ?>

    <div class="home-agenda-section">
        <div class="agenda-intro-card">
            <div class="intro-content">
                <h2 class="intro-title">Agenda</h2>
                <p class="intro-text">Découvrez les dernières nouvelles et événements marquants de Saint-Gilles-Les-Bains.</p>
            </div>
            <div class="agenda-slider-nav">
                <div class="swiper-button-prev-custom">←</div>
                <div class="swiper-button-next-custom">→</div>
            </div>
        </div>

        <div class="agenda-slider-wrapper swiper-container-sglb">
            <div class="swiper-wrapper">
                <?php while ( $query->have_posts() ) : $query->the_post(); 
                    $p_id = get_the_ID();
                    // Récupération des données
                    $date_raw = get_post_meta($p_id, '_sglb_event_date_start', true);
                    $time     = get_post_meta($p_id, '_sglb_event_time_start', true);
                    $linked   = get_post_meta($p_id, '_sglb_event_linked_listing', true);
                    $location = $linked ? get_the_title($linked) : 'Lieu à venir';
                    
                    // Formatage de la date (ex: 20 FÉVRIER)
                    $date_formated = date_i18n('j F', strtotime($date_raw));
                ?>
                    <div class="swiper-slide">
                        <article class="sglb-event-card">
                            <a href="<?php the_permalink(); ?>">
                                <div class="card-image">
                                    <?php if ( has_post_thumbnail() ) : the_post_thumbnail('medium_large'); endif; ?>
                                    <span class="card-badge">Évènement</span>
                                </div>
                                <div class="card-content">
                                    <h3 class="card-title"><?php the_title(); ?></h3>
                                    <div class="card-time-row">
                                        <span class="card-date"><?php echo esc_html($date_formated); ?></span>
                                        <span class="card-hours"><?php echo esc_html($time); ?></span>
                                    </div>
                                    <p class="card-location"><?php echo esc_html($location); ?></p>
                                </div>
                            </a>
                        </article>
                    </div>
                <?php endwhile; wp_reset_postdata(); ?>
            </div>
        </div>
    </div>

    <script>
    document.addEventListener('DOMContentLoaded', function() {
        var swiper = new Swiper('.swiper-container-sglb', {
            slidesPerView: 1,
            spaceBetween: 20,
            navigation: {
                nextEl: '.swiper-button-next-custom',
                prevEl: '.swiper-button-prev-custom',
            },
            breakpoints: {
                768: { slidesPerView: 2 },
                1024: { slidesPerView: 3 }
            }
        });
    });
    </script>

    <?php
    return ob_get_clean();
});