?AlkantarClanX12

Your IP : 216.73.217.134


Current Path : /home/rankinh/saintgilleslesbains-bis/wp-content/themes/sglb-elementor-child/
Upload File :
Current File : /home/rankinh/saintgilleslesbains-bis/wp-content/themes/sglb-elementor-child/functions.php

<?php
/**
 * Hello Elementor Child functions and definitions
 */
// 1. Définition du chemin du dossier INC (Indispensable pour éviter l'erreur Notice)
$inc_path = get_stylesheet_directory() . '/inc/';
$shortcode_path = $inc_path . 'shortcodes/';

// 1. Chargement des styles du thème parent
add_action( 'wp_enqueue_scripts', function() {
	wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' );
});

// 2. Importation de votre logique métier (Annuaires, Agenda, Meta-données)
$child_inc_path = get_stylesheet_directory() . '/inc/';

// On charge les types de posts (pour retrouver vos 600 fiches)
if ( file_exists( $child_inc_path . 'post-types.php' ) ) {
    require_once $child_inc_path . 'post-types.php';
}

// On charge les meta-données (adresses, labels, etc.)
if ( file_exists( $child_inc_path . 'meta-listing.php' ) ) {
    require_once $child_inc_path . 'meta-listing.php';
}

// Chargement des shortcodes pour Elementor
if ( file_exists( $shortcode_path . 'elementor-shortcodes.php' ) ) {
    require_once $shortcode_path . 'elementor-shortcodes.php';
}

add_action( 'template_redirect', function() {
    if ( ! is_tax() ) return;

    ob_start( function( $buffer ) {
        $current_term = get_queried_object();
        if ( ! $current_term || is_wp_error( $current_term ) ) return $buffer;

        $term_name = esc_html( $current_term->name );
        $term_url  = esc_url( get_term_link( $current_term ) );

        // Remplace le contenu du premier <h1> par uniquement la catégorie courante
        $buffer = preg_replace(
            '/<h1([^>]*)>.*?<\/h1>/s',
            '<h1$1><a href="' . $term_url . '">' . $term_name . '</a></h1>',
            $buffer,
            1 // seulement le premier <h1>
        );

        return $buffer;
    });
} );

/**
 * Annuaire formulaire de recherche
 */
add_action('pre_get_posts', function($query) {
    // On agit seulement si c'est la requête principale et pas dans l'admin
    if (!is_admin() && $query->is_main_query()) {
        
        // On vérifie si on est sur l'annuaire ou si on cherche un listing
        if (is_post_type_archive('sglb_listing') || $query->get('post_type') === 'sglb_listing') {
            
            $tax_query = array('relation' => 'AND');

            // Filtre Catégorie
            if (!empty($_GET['cat_annuaire'])) {
                $tax_query[] = array(
                    'taxonomy' => 'sglb_listing_cat',
                    'field'    => 'slug',
                    'terms'    => sanitize_text_field($_GET['cat_annuaire']),
                );
            }

            // Filtre Quartier (On utilise bien quartier_annuaire)
            if (!empty($_GET['quartier_annuaire'])) {
                $tax_query[] = array(
                    'taxonomy' => 'sglb_listing_region',
                    'field'    => 'slug',
                    'terms'    => sanitize_text_field($_GET['quartier_annuaire']),
                );
            }

            if (count($tax_query) > 1) {
                $query->set('tax_query', $tax_query);
            }
        }
    }
});


/**
 * SGLB : Filtrage global des événements (Recherche, Catégories, Mois)
 */
add_action('pre_get_posts', function($query) {
    // On n'agit que sur le front-end et la requête principale
    if (!is_admin() && $query->is_main_query()) {
        
        // On cible l'archive des événements ou le type de post 'sglb_event'
        if (is_post_type_archive('sglb_event') || $query->get('post_type') === 'sglb_event') {
            
            $meta_query = ['relation' => 'AND'];
            $tax_query  = ['relation' => 'AND'];

            // 1. Recherche par mot-clé personnalisé (recherche_event)
            if (!empty($_GET['recherche_event'])) {
                $query->set('s', sanitize_text_field($_GET['recherche_event']));
            }

            // 2. Filtrage par Catégorie d'événement
            // On utilise la taxonomie 'sglb_event_cat' déclarée dans post-types.php
            if (!empty($_GET['cat_event'])) {
                $tax_query[] = [
                    'taxonomy' => 'sglb_event_cat',
                    'field'    => 'slug',
                    'terms'    => sanitize_text_field($_GET['cat_event']),
                ];
            }

            // 3. Filtrage par Mois (votre logique actuelle)
            if (!empty($_GET['mois_event'])) {
                $mois = sanitize_text_field($_GET['mois_event']);
                $annee = date('Y');
                $debut_mois = "$annee-$mois-01";
                $fin_mois   = date("Y-m-t", strtotime($debut_mois));

                $meta_query[] = [
                    'relation' => 'OR',
                    [
                        'key'     => '_sglb_event_date_end',
                        'value'   => $debut_mois,
                        'compare' => '>=',
                        'type'    => 'DATE'
                    ],
                    [
                        'key'     => '_sglb_event_recurrence_end_date',
                        'value'   => $debut_mois,
                        'compare' => '>=',
                        'type'    => 'DATE'
                    ]
                ];
                
                $meta_query[] = [
                    'key'     => '_sglb_event_date_start',
                    'value'   => $fin_mois,
                    'compare' => '<=',
                    'type'    => 'DATE'
                ];
            }

            // Application des filtres à la requête
            if (count($meta_query) > 1) {
                $query->set('meta_query', $meta_query);
            }
            if (count($tax_query) > 1) {
                $query->set('tax_query', $tax_query);
            }
        }
    }
});