Añadir mu-plugins y scripts de feadulta
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
<?php
|
||||
/**
|
||||
* create_buscar_page.php (#8) — Crea/repara la página dedicada /buscar.
|
||||
* La página sirve como destino del enlace «Búsqueda avanzada» y muestra el formulario
|
||||
* avanzado aunque no haya consulta activa.
|
||||
*
|
||||
* Idempotente de verdad:
|
||||
* - Si /buscar NO existe → la crea (es) + traducciones (en/fr/it/pt) y las vincula.
|
||||
* - Si /buscar YA existe → la deja, pero REPARA traducciones Polylang faltantes o
|
||||
* no publicadas (crea las que falten, publica las que estén en borrador, revincula).
|
||||
*
|
||||
* Uso:
|
||||
* wp eval-file scripts/create_buscar_page.php # DRY-RUN
|
||||
* APPLY=1 wp eval-file scripts/create_buscar_page.php # aplica
|
||||
*/
|
||||
$apply = getenv('APPLY') === '1';
|
||||
|
||||
$titles = [
|
||||
'es' => '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 = '<p>Utiliza el formulario de búsqueda avanzada para encontrar reflexiones, artículos y más.</p>';
|
||||
|
||||
$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";
|
||||
Reference in New Issue
Block a user