From 2ab43d2615cec9d937214faab871c2cbc5a944ad Mon Sep 17 00:00:00 2001 From: gustavo Date: Thu, 21 Aug 2025 07:21:55 +0000 Subject: [PATCH] MODIF backend segundo idioma --- src/StarterSite.php | 212 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 173 insertions(+), 39 deletions(-) diff --git a/src/StarterSite.php b/src/StarterSite.php index e3b24ef..9108b51 100644 --- a/src/StarterSite.php +++ b/src/StarterSite.php @@ -33,7 +33,16 @@ class StarterSite extends Site { add_filter('timber/context', [$this, 'add_global_context']); // variables globales add_filter('timber/twig', [$this, 'add_videos_embed_to_twig']); //videos embed add_action('pre_get_posts', array($this, 'exclude_pages_from_search')); //exclude pages with ACF - + + add_action('init', function() { + if (function_exists('pll_current_language')) { + // Forzar que ACF reconozca el idioma actual + add_filter('acf/settings/current_language', function() { + return pll_current_language(); + }); + } + }); + parent::__construct(); } @@ -204,13 +213,23 @@ class StarterSite extends Site { return $file_types; } - //section "portada" - private function getBotonesImagen() { + //section "portada> ENLACES" + private function getBotonesImagen($page_id = null) { + + if (is_null($page_id)) { + $page_id = get_the_ID(); + // Si estamos en euskera, obtener la página en español + if (pll_current_language() == 'eu') { + $spanish_page_id = pll_get_post($page_id, 'es'); + $page_id = $spanish_page_id ?: $page_id; + } + } + $botones = []; for ($i = 1; $i <= 4; $i++) { - $imagen = get_field('imagen_boton_' . $i); - $enlace = get_field('enlace_boton_' . $i); + $imagen = get_field('imagen_boton_' . $i, $page_id); + $enlace = get_field('enlace_boton_' . $i, $page_id); $botones[] = [ 'imagen' => $imagen, @@ -255,7 +274,7 @@ class StarterSite extends Site { for ($i = 1; $i <= $max_logos; $i++) { $logoHeader = get_field('logo_header_' . $i, 'option'); $textoHeader = get_field('texto_header_' . $i, 'option'); - + if ($logoHeader || $textoHeader) { $logos[] = [ 'logo' => $logoHeader, @@ -285,6 +304,49 @@ class StarterSite extends Site { 'orderby' => 'date', 'order' => 'DESC' ]); + + // $current_lang = pll_current_language(); + + // // Consulta con filtro de idioma + // $posts = Timber::get_posts([ + // 'post_type' => 'opinion', + // 'posts_per_page' => 1, + // 'post_status' => 'publish', + // 'orderby' => 'date', + // 'order' => 'DESC', + // 'lang' => $current_lang // ← Filtro por idioma + // ]); + + // // Debug temporal - quítalo después + // $debug_all = Timber::get_posts([ + // 'post_type' => 'opinion', + // 'posts_per_page' => -1, + // 'post_status' => 'publish' + // ]); + + // $debug_spanish = Timber::get_posts([ + // 'post_type' => 'opinion', + // 'posts_per_page' => -1, + // 'post_status' => 'publish', + // 'lang' => 'es' + // ]); + + // $debug_euskera = Timber::get_posts([ + // 'post_type' => 'opinion', + // 'posts_per_page' => -1, + // 'post_status' => 'publish', + // 'lang' => 'eu' + // ]); + + // // Logging temporal + // error_log("=== DEBUG ARTICULOS OPINION ==="); + // error_log("Idioma actual: " . $current_lang); + // error_log("Total artículos opinion: " . count($debug_all)); + // error_log("Artículos en español: " . count($debug_spanish)); + // error_log("Artículos en euskera: " . count($debug_euskera)); + // error_log("Resultado consulta actual: " . count($posts)); + + // return $posts; } private function getCampanaArticles() { @@ -355,32 +417,35 @@ class StarterSite extends Site { 'post_status' => 'publish', 'orderby' => 'menu_order', 'order' => 'ASC', - 'posts_per_page' => -1, - + 'posts_per_page' => -1, ]); } + //Obtiene los "Documentos" private function getDocumentos() { - $posts = Timber::get_posts([ + $args = ([ 'post_type' => 'documento', 'post_status' => 'publish', 'orderby' => 'menu_order', 'order' => 'ASC', 'posts_per_page' => -1, + 'lang' => '', ]); //error_log('✅ Número de posts "Documentos" encontrados: ' . count($posts)); + $posts = Timber::get_posts($args); $documentos = []; foreach ($posts as $post) { $doc = [ - 'id' => $post->ID, - 'title' => $post->title, - 'link' => $post->link, - 'content' => $post->content, - 'excerpt' => $post->excerpt, + 'id' => $post->ID, + 'title' => $post->title, + 'link' => $post->link, + 'content' => $post->content, + 'excerpt' => $post->excerpt, + 'lang' => pll_get_post_language($post->ID), ]; $archivo = get_field('documento', $post->ID); @@ -399,14 +464,14 @@ class StarterSite extends Site { return $documentos; } - /** - * Obtiene los grupos de enlaces de la página "Enlaces" - */ + /** Obetiene campos de "Enlaces" */ private function getEnlaces() { $grupos = []; - // Buscar página por su slug - $page = get_page_by_path('enlaces'); + // Buscar página por su slug & Cambia dinámicamente según idioma + $page = get_page_by_path( pll_current_language() === 'eu' ? 'loturak' : 'enlaces' ); + //error_log('✅ Página "enlaces" encontrada con ID: ' . $page->ID); + if (!$page) { error_log('🔴 Página "enlaces" no encontrada con get_page_by_path().'); @@ -425,7 +490,6 @@ class StarterSite extends Site { $field = get_field('grupos_enlaces', $page->ID); //error_log('📦 Contenido de get_field: ' . print_r($field, true)); - //error_log('✅ Página "enlaces" encontrada con ID: ' . $page->ID); while (have_rows('grupos_enlaces', $page->ID)) { the_row(); @@ -473,6 +537,8 @@ class StarterSite extends Site { if (!$pag_servicios_publicos) { error_log('🔴 Página "Servicios públicos" no encontrada.'); return []; + } else { + //error_log('✅ Página "Servicios públicos" encontrada.'); } $subpaginas = Timber::get_posts([ @@ -500,6 +566,8 @@ class StarterSite extends Site { if (!$pag_servicios_privados) { error_log('🔴 Página "Servicios privados" no encontrada.'); return []; + } else { + //error_log('✅ Página "Servicios privados" encontrada.'); } $subpaginas = Timber::get_posts([ @@ -519,9 +587,57 @@ class StarterSite extends Site { return $subpaginas; } + private function getSubpaginasServicios() { + // Detectar automáticamente si es servicios públicos o privados + $current_post = get_post(); + $slug_actual = $current_post->post_name; + + // Determinar qué página padre buscar según el slug actual + if ($slug_actual === 'servicios-publicos') { + $path = 'accion-sindical/servicios-publicos'; + $tipo = 'publicos'; + } elseif ($slug_actual === 'servicios-privados') { + $path = 'accion-sindical/servicios-privados'; + $tipo = 'privados'; + } else { + return []; + } + + $pag_servicios = get_page_by_path($path); + if (!$pag_servicios) { + error_log("🔴 Página '$path' no encontrada."); + return []; + } + + $subpaginas = Timber::get_posts([ + 'post_type' => 'page', + 'post_status' => 'publish', + 'post_parent' => $pag_servicios->ID, + 'orderby' => 'menu_order', + 'order' => 'ASC', + 'posts_per_page' => -1, + ]); + + foreach ($subpaginas as $pagina) { + $pagina->thumbnail = get_the_post_thumbnail_url($pagina->ID); + $pagina->tipo_servicio = $tipo; // Para usar en la plantilla si necesitas distinguir + } + + return $subpaginas; + } + + //Campos de contactos public function getContactoFields() { $post = Timber::get_post(); + + if (!$post) { + error_log('🔴 No hay páginas de contactos.'); + return []; // devolver un array vacío para evitar el error + } + $form_shortcode = get_field('etiqueta_formulario', $post->ID); // o el campo ACF donde esté el shortcode + //error_log('✅ ID Página "Contactos": ' . $post->ID); + $contactsFields = [ 'nombre' => get_field('nombre_contacto', $post->ID), @@ -538,23 +654,7 @@ class StarterSite extends Site { } - public function getAfiliateFields() { - $post = Timber::get_post(); - - - $afiliateFields = [ - 'imagen_afiliate' => get_field('imagen_afiliate', $post->ID), - 'enlace_boton_afiliate' => get_field('enlace_boton_afiliate', $post->ID), - 'texto_boton' => get_field('texto_boton', $post->ID), - ]; - - if (empty($afiliateFields['imagen_afiliate']) && empty($afiliateFields['enlace_boton_afiliate'])) { - return null; - } - - return $afiliateFields; - } - + // Excluir páginas de la búsqueda public function exclude_pages_from_search($query) { if (!is_admin() && $query->is_main_query() && $query->is_search()) { $query->set('meta_query', array( @@ -572,6 +672,38 @@ class StarterSite extends Site { } } + // Añadir idiomas de Polylang + private function getPolylangData() { + $polylang_data = array(); + + if (function_exists('pll_the_languages')) { + // Idiomas con toda la información + $polylang_data['languages'] = pll_the_languages(array( + 'raw' => 1, + 'hide_if_no_translation' => 0, + 'show_flags' => 1, + 'show_names' => 1 + )); + + // Información del idioma actual + $polylang_data['current_language'] = pll_current_language(); + $polylang_data['current_language_name'] = pll_current_language('name'); + $polylang_data['default_language'] = pll_default_language(); + + // DEBUG: Escribir en el log de errores + //error_log('Languages: ' . print_r($polylang_data['languages'], true)); + //error_log('Current language: ' . $polylang_data['current_language']); + //error_log('Default language: ' . $polylang_data['default_language']); + + // URLs de home para cada idioma + $polylang_data['home_urls'] = array(); + foreach ($polylang_data['languages'] as $lang) { + $polylang_data['home_urls'][$lang['slug']] = $lang['url']; + } + } + + return $polylang_data; + } //Global variables public function add_global_context($context) { @@ -579,7 +711,7 @@ class StarterSite extends Site { $context['footer_1'] = get_field('footer_text_1', 'option'); $context['footer_2'] = get_field('footer_text_2', 'option'); $context['recent_posts_noticias'] = $this->recentPostsNews(); - $context['botones_imagen'] = $this->getBotonesImagen(); + $context['botones_imagen'] = $this->getBotonesImagen(); //ENLACES $context['redes_sociales'] = $this->getIconsRRSS(); $context['logos_header'] = $this->getLogosHeader(); $context['videos'] = $this->getVideos(); @@ -591,7 +723,9 @@ class StarterSite extends Site { $context['subpaginas_servicios_publicos'] = $this->getPaginasServiciosPublicos(); $context['subpaginas_servicios_privados'] = $this->getPaginasServiciosPrivados(); $context['contacto_info'] = $this->getContactoFields(); - $context['afiliate_fields'] = $this->getAfiliateFields(); + //$context['afiliate_fields'] = $this->getAfiliateFields(); + $context = array_merge($context, $this->getPolylangData()); + $context['subpaginas_servicios'] = $this->getSubpaginasServicios(); return $context; }