Je suis un titre

filtre

    Comment j’ai créé un modèle - 13507

    date AP: {mb_atelier-pnl_ap_debut_datetime}
    saison: {mb_atelier-pnl_ap_saison}
    replay pour: {mb_atelier-pnl_ap_replay_disponible}

    Travail sur la Ligne du temps - 12998

    date AP: {mb_atelier-pnl_ap_debut_datetime}
    saison: {mb_atelier-pnl_ap_saison}
    replay pour: {mb_atelier-pnl_ap_replay_disponible}

    De l’autosabotage à la sérénité par l’Intelligence Positive™ - 12517

    date AP: {mb_atelier-pnl_ap_debut_datetime}
    saison: {mb_atelier-pnl_ap_saison}
    replay pour: {mb_atelier-pnl_ap_replay_disponible}

    Techniques de langage avec les 6 éléphants de Steve Andreas - 12498

    date AP: {mb_atelier-pnl_ap_debut_datetime}
    saison: {mb_atelier-pnl_ap_saison}
    replay pour: {mb_atelier-pnl_ap_replay_disponible}

    Atelier de la rentrée saison 2025-2026 - 12497

    date AP: {mb_atelier-pnl_ap_debut_datetime}
    saison: {mb_atelier-pnl_ap_saison}
    replay pour: {mb_atelier-pnl_ap_replay_disponible}

    Le modèle SWISH – démo et pratique - 12400

    date AP: {mb_atelier-pnl_ap_debut_datetime}
    saison: {mb_atelier-pnl_ap_saison}
    replay pour: {mb_atelier-pnl_ap_replay_disponible}

    Les Sleight of Mouth patterns - 11793

    date AP: {mb_atelier-pnl_ap_debut_datetime}
    saison: {mb_atelier-pnl_ap_saison}
    replay pour: {mb_atelier-pnl_ap_replay_disponible}

    Atelier de Pratique: Transformer vos Croyances Limitantes avec les patterns de Polya - 11749

    date AP: {mb_atelier-pnl_ap_debut_datetime}
    saison: {mb_atelier-pnl_ap_saison}
    replay pour: {mb_atelier-pnl_ap_replay_disponible}

    Les mots nous mentent-ils? - 11594

    date AP: {mb_atelier-pnl_ap_debut_datetime}
    saison: {mb_atelier-pnl_ap_saison}
    replay pour: {mb_atelier-pnl_ap_replay_disponible}

    MOSAIC : Au-delà du problème, l’activation de la solution intérieure - 11577

    date AP: {mb_atelier-pnl_ap_debut_datetime}
    saison: {mb_atelier-pnl_ap_saison}
    replay pour: {mb_atelier-pnl_ap_replay_disponible}
    <?php
    // functions.php ou fichier plugin personnalisé
    
    // 1. Fonction d'affichage des filtres
    function display_bricks_filters() {
        ?>
        <div class="bricks-filters">
            <!-- Tri -->
            <div class="filter-group">
                <label for="orderby-filter">Trier par :</label>
                <select id="orderby-filter">
                    <option value="">Par défaut</option>
                    <option value="date_atelier" <?php selected(isset($_GET['orderby']) ? $_GET['orderby'] : '', 'date_atelier'); ?>>
                        Date de l'atelier
                    </option>
                    <option value="saison" <?php selected(isset($_GET['orderby']) ? $_GET['orderby'] : '', 'saison'); ?>>
                        Saison
                    </option>
                </select>
            </div>
    
            <!-- Filtres -->
            <div class="filter-group">
                <label for="replay-status">Statut Replay :</label>
                <select id="replay-status">
                    <option value="">Tous</option>
                    <option value="with_replay" <?php selected(isset($_GET['replay_status']) ? $_GET['replay_status'] : '', 'with_replay'); ?>>
                        Avec replay
                    </option>
                    <option value="without_replay" <?php selected(isset($_GET['replay_status']) ? $_GET['replay_status'] : '', 'without_replay'); ?>>
                        Sans replay
                    </option>
                </select>
            </div>
    
            <div class="filter-group">
                <label for="replay-disponible">Disponibilité Replay :</label>
                <select id="replay-disponible">
                    <option value="">Tous</option>
                    <option value="tout" <?php selected(isset($_GET['replay_disponible']) ? $_GET['replay_disponible'] : '', 'tout'); ?>>
                        Tout le monde
                    </option>
                    <option value="limite" <?php selected(isset($_GET['replay_disponible']) ? $_GET['replay_disponible'] : '', 'limite'); ?>>
                        Limité
                    </option>
                </select>
            </div>
        </div>
        <?php
    }
    
    // 2. Enregistrer les scripts et styles
    function register_bricks_facet_assets() {
        wp_enqueue_script('bricks-facets', get_template_directory_uri() . '/js/bricks-facets.js', array('jquery'), '1.0', true);
        wp_enqueue_style('bricks-facets-style', get_template_directory_uri() . '/css/bricks-facets.css');
        
        wp_localize_script('bricks-facets', 'bricksFacets', array(
            'ajaxurl' => admin_url('admin-ajax.php'),
            'nonce' => wp_create_nonce('bricks_facet_nonce')
        ));
    }
    add_action('wp_enqueue_scripts', 'register_bricks_facet_assets');
    
    // 3. Hook pour filtrer les arguments de requête de Bricks
    function filter_bricks_query_args($query_args) {
        error_log('Bricks query args interceptés');
        
        if (isset($_GET['facet_filter']) && $query_args['post_type'] === 'atelier-pnl') {
            // Meta queries pour les filtres
            $meta_query = array();
            
            // Filtre pour replay URL
            if (!empty($_GET['replay_status'])) {
                if ($_GET['replay_status'] === 'with_replay') {
                    $meta_query[] = array(
                        'key' => 'ap_url_replay',
                        'compare' => '!=',
                        'value' => ''
                    );
                } elseif ($_GET['replay_status'] === 'without_replay') {
                    $meta_query[] = array(
                        'key' => 'ap_url_replay',
                        'compare' => 'NOT EXISTS'
                    );
                }
            }
            
            // Filtre pour replay disponible
            if (!empty($_GET['replay_disponible'])) {
                $meta_query[] = array(
                    'key' => 'ap_replay_disponible',
                    'value' => 'tout',
                    'compare' => $_GET['replay_disponible'] === 'tout' ? '=' : '!='
                );
            }
            
            // Appliquer les meta queries
            if (!empty($meta_query)) {
                if (count($meta_query) > 1) {
                    $meta_query['relation'] = 'AND';
                }
                $query_args['meta_query'] = $meta_query;
            }
            
            // Gestion du tri
            if (!empty($_GET['orderby'])) {
                switch ($_GET['orderby']) {
                    case 'date_atelier':
                        $query_args['meta_key'] = 'ap_debut_datetime';
                        $query_args['orderby'] = 'meta_value';
                        $query_args['order'] = 'ASC';
                        break;
                    case 'saison':
                        $query_args['meta_key'] = 'ap_saison';
                        $query_args['orderby'] = 'meta_value';
                        $query_args['order'] = 'ASC';
                        break;
                }
            }
            
            error_log('Query args modifiés : ' . print_r($query_args, true));
        }
        
        return $query_args;
    }
    add_filter('bricks/posts/query_vars', 'filter_bricks_query_args', 10, 1);
    
    display_bricks_filters(); ?>
    /* css/bricks-facets.css */
    .bricks-filters {
        margin-bottom: 2em;
        display: flex;
        flex-wrap: wrap;
        gap: 1.5em;
    }
    
    .filter-group {
        display: flex;
        flex-direction: column;
        gap: 0.5em;
    }
    
    .filter-group label {
        font-weight: 500;
        color: #666;
        font-size: 0.9em;
    }
    
    .bricks-filters select {
        padding: 8px 16px;
        border: 1px solid #ddd;
        border-radius: 4px;
        background-color: #fff;
        min-width: 200px;
        cursor: pointer;
    }
    
    .bricks-filters select:hover {
        border-color: #999;
    }
    
    .bricks-filters select:focus {
        outline: none;
        border-color: #666;
        box-shadow: 0 0 0 2px rgba(0,0,0,0.1);
    }
    
    @media (max-width: 768px) {
        .bricks-filters {
            flex-direction: column;
            gap: 1em;
        }
        
        .filter-group {
            width: 100%;
        }
        
        .bricks-filters select {
            width: 100%;
        }
    }
    jQuery(document).ready(function($) {
        function updateQueryString(key, value) {
            const urlParams = new URLSearchParams(window.location.search);
            if (value) {
                urlParams.set(key, value);
            } else {
                urlParams.delete(key);
            }
            urlParams.set('facet_filter', '1');
            return urlParams.toString();
        }
    
        function filterBricksQuery() {
            const orderby = $('#orderby-filter').val();
            const replayStatus = $('#replay-status').val();
            const replayDisponible = $('#replay-disponible').val();
            
            let queryString = new URLSearchParams();
            
            if (orderby) queryString.set('orderby', orderby);
            if (replayStatus) queryString.set('replay_status', replayStatus);
            if (replayDisponible) queryString.set('replay_disponible', replayDisponible);
            if (queryString.toString()) queryString.set('facet_filter', '1');
            
            window.location.search = queryString.toString();
        }
        
        $('.bricks-filters select').on('change', filterBricksQuery);
    });