'Búsqueda avanzada', 'en' => 'Advanced Search', 'fr' => 'Recherche avancée', 'it' => 'Ricerca avanzata', 'pt' => 'Pesquisa avançada', ]; // Contenido mínimo (sin bloques Gutenberg). El formulario se inyecta vía the_content. $content = '
Utiliza el formulario de búsqueda avanzada para encontrar reflexiones, artículos y más.
'; $has_pll = function_exists('pll_set_post_language') && function_exists('pll_save_post_translations'); $pll_langs = (function_exists('pll_languages_list')) ? pll_languages_list(['fields' => 'slug']) : ['es']; /** Crea (o devuelve si existe) una página por slug, con idioma Polylang. */ function fea_buscar_ensure_page(string $slug, string $title, string $content, string $lang, bool $apply, bool $has_pll) { $existing = get_page_by_path($slug, OBJECT, 'page'); if ($existing) { // Asegurar que está publicada if ($apply && $existing->post_status !== 'publish') { wp_update_post(['ID' => $existing->ID, 'post_status' => 'publish']); echo " · ({$lang}) página '{$slug}' existía en estado {$existing->post_status} → publicada (ID {$existing->ID})\n"; } else { echo " · ({$lang}) página '{$slug}' ya existe y publicada (ID {$existing->ID})\n"; } // Asegurar idioma asignado if ($apply && $has_pll && function_exists('pll_get_post_language')) { $cur = pll_get_post_language($existing->ID); if ($cur !== $lang) { pll_set_post_language($existing->ID, $lang); echo " idioma → {$lang}\n"; } } return (int) $existing->ID; } echo ($apply ? " · ({$lang}) creando" : " · ({$lang}) [dry] crearía") . " página '{$slug}'\n"; if (!$apply) return 0; $id = wp_insert_post([ 'post_type' => 'page', 'post_status' => 'publish', 'post_name' => $slug, 'post_title' => $title, 'post_content' => $content, 'post_author' => 1, ], true); if (is_wp_error($id)) { echo " ERROR: " . $id->get_error_message() . "\n"; return 0; } if ($has_pll) pll_set_post_language($id, $lang); echo " creada (ID {$id})\n"; return (int) $id; } echo ($apply ? "APLICANDO" : "DRY-RUN") . " — crear/reparar /buscar\n"; // 1) Página ES (slug 'buscar') $translations = []; $es_id = fea_buscar_ensure_page('buscar', $titles['es'], $content, 'es', $apply, $has_pll); if ($es_id) $translations['es'] = $es_id; // 2) Traducciones (en/fr/it/pt) sólo si Polylang activo y el idioma existe if ($has_pll) { foreach (['en', 'fr', 'it', 'pt'] as $lang) { if (!in_array($lang, $pll_langs, true)) { echo " · ({$lang}) idioma no configurado en Polylang, omitido\n"; continue; } // Si ya hay traducción vinculada a la ES, reusarla $linked = ($es_id && function_exists('pll_get_post')) ? (int) pll_get_post($es_id, $lang) : 0; if ($linked) { $p = get_post($linked); if ($p && $p->post_status !== 'publish' && $apply) { wp_update_post(['ID' => $linked, 'post_status' => 'publish']); echo " · ({$lang}) traducción vinculada (ID {$linked}) estaba {$p->post_status} → publicada\n"; } else { echo " · ({$lang}) traducción ya vinculada (ID {$linked})\n"; } $translations[$lang] = $linked; continue; } // Crear/reparar por slug $tl_id = fea_buscar_ensure_page('buscar-' . $lang, $titles[$lang], $content, $lang, $apply, $has_pll); if ($tl_id) $translations[$lang] = $tl_id; } // 3) Revincular todas las traducciones if ($apply && count($translations) > 1) { pll_save_post_translations($translations); echo " · traducciones revinculadas: " . implode(', ', array_map( fn($l, $id) => "{$l}={$id}", array_keys($translations), $translations)) . "\n"; } } if (function_exists('wp_cache_flush')) wp_cache_flush(); echo ($apply ? "APLICADO" : "DRY-RUN") . "\n";