// ========================================== // MASQUAGE CONDITIONNEL SECTIONS HEADER (PHP - VERSION RENFORCÉE V2) // ========================================== add_filter( 'elementor/frontend/section/should_render', 'wiob_hide_header_sections_php', 10, 2 ); function wiob_hide_header_sections_php( $should_render, $element ) { // Si Elementor a déjà masqué, on ne touche pas if ( false === $should_render || ! is_object( $element ) ) { return false; } // --- 1. CONTEXTE (Anglais + Catégorie) --- // Utilisation d'un check WPML plus direct en secours $lang = defined('ICL_LANGUAGE_CODE') ? ICL_LANGUAGE_CODE : ''; if ( empty($lang) ) { $lang = apply_filters( 'wpml_current_language', NULL ); } $is_english = ( $lang === 'en' || strpos($_SERVER['REQUEST_URI'], '/en/') !== false ); $is_cat_context = false; if ( is_home() || is_category() || is_singular('post') || (is_archive() && get_post_type() === 'post') ) { $is_cat_context = true; } if ( is_post_type_archive('offre') || is_tax('offre_categorie') || is_singular('offre') ) { $is_cat_context = true; } if ( defined('WIOB_HIDE_HEADER_SECTION') && WIOB_HIDE_HEADER_SECTION ) { $is_cat_context = true; } // Si le contexte n'est pas bon, on affiche tout et on arrête if ( ! ($is_english && $is_cat_context) ) { return true; } // --- 2. DÉTECTION DU HEADER (Plus robuste) --- // On vérifie si le document parent est un Header, même si get_type() échoue $is_header_doc = false; if ( method_exists( $element, 'get_document' ) ) { $doc = $element->get_document(); if ( $doc ) { // Méthode 1 : Type officiel Elementor if ( method_exists( $doc, 'get_type' ) && $doc->get_type() === 'header' ) { $is_header_doc = true; } // Méthode 2 : Vérification des métadonnées (si Méthode 1 échoue) elseif ( method_exists( $doc, 'get_main_id' ) ) { $template_type = get_post_meta( $doc->get_main_id(), '_elementor_template_type', true ); if ( $template_type === 'header' ) { $is_header_doc = true; } } } } // Si ce n'est PAS un header, on affiche (sécurité pour ne pas casser le contenu des pages) if ( ! $is_header_doc ) { return true; } // --- 3. ANALYSE DU CONTENU (Widgets Menu/Logo) --- // Liste des widgets qui "sauvent" la section de la suppression $whitelisted_widgets = [ 'nav-menu', // Elementor Pro Nav Menu 'theme-site-logo', // Elementor Site Logo 'theme-logo', // Ancien Logo 'global', // Widget Global (peut être un menu) 'wp-widget-nav_menu' // Widget WP standard ]; $contains_required_widget = false; $children = $element->get_children(); // Colonnes if ( ! empty( $children ) ) { foreach ( $children as $column ) { if ( ! is_object($column) ) continue; $widgets = $column->get_children(); if ( ! empty( $widgets ) ) { foreach ( $widgets as $widget ) { if ( ! is_object($widget) ) continue; $widget_name = $widget->get_name(); // Si on trouve un widget autorisé, on garde la section if ( in_array( $widget_name, $whitelisted_widgets ) ) { $contains_required_widget = true; break 2; // On a trouvé, on sort de tout } } } } } // --- 4. VERDICT & DEBUG --- // Si la section ne contient ni menu ni logo, on la cache if ( ! $contains_required_widget ) { // Optionnel : Décommentez la ligne ci-dessous pour voir dans le code source HTML ce qui a été caché // echo ''; return false; } return true; }