?AlkantarClanX12
| Current Path : /home/rankinh/saintgilleslesbains-bis/wp-content/themes/sglb-elementor-child/ |
| 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);
}
}
}
});