Sync: guardar en el historial el trabajo de las ultimas semanas que solo vivia en el disco

Este repo local tenia origin apuntando al Gitea local (localhost:3000), que Rafa
declaro archivado el 2026-06-28 (commit 962f33a, desarrollo movido a
gitea.feadulta.com). Ese memo nunca llego a este checkout: main quedo congelado
y todo el trabajo real de las ultimas 3+ semanas se fue commiteando solo en la
rama fix/multiidioma-portada-132 (ya fusionada a main sin perdida, commit
2504666), mientras que ademas se acumulaban 78 cambios sin commitear en el
working tree que nunca llegaron a NINGUN historial de git.

Este commit consolida esos cambios sueltos: TTS multi-voz (tts_*.py), scripts
de traduccion (translate_haiku.py, pretranslate_en_haiku.py, sync_translations_to_prod.py),
mu-plugins nuevos desplegados a prod (fea-beta-feedback, fea-cloudflare-realip,
fea-legacy-redirect, fea-gsc-verification, fea-support-campaign, fea-ui, etc.),
scripts de mantenimiento de enlaces/cartas, capturas E2E (tools/e2e/shot_*.cjs)
y documentacion de sesiones recientes.

Excluido deliberadamente (no es codigo versionable): tts-voices/ (3.3GB de
muestras de audio para clonacion de voz, anadido a .gitignore), logs/ (logs de
ejecucion, anadido a .gitignore), y 2 ficheros vacios accidentales + 2 copias
duplicadas sueltas en la raiz que ya existen en su ubicacion correcta.
This commit is contained in:
2026-07-15 20:03:21 -04:00
parent 250466696b
commit 69e849d38e
72 changed files with 5413 additions and 220 deletions
+35 -9
View File
@@ -1,13 +1,10 @@
<?php
/**
* Ciclo carta nueva — deja en la categoría "carta de la semana" SOLO la carta nueva,
* en TODOS los idiomas (ES + EN/FR/IT/PT), moviendo las anteriores a "cartas de otras
* semanas". Necesario para que el menú/categoría de cada idioma tenga count=1 y redirija
* directo al single (carta-semana-plugin). En ES suele hacerse al importar; las
* traducciones NO lo heredan -> ejecutar esto tras publicar las traducciones.
* Ciclo carta nueva — sincroniza "esta semana", "semana pasada" y "otras semanas"
* en TODOS los idiomas (ES + EN/FR/IT/PT).
*
* Deriva los términos por Polylang desde los términos ES base:
* cartasemana = term 6 | cartas-de-otras-semanas = term 21
* cartasemana = term 6 | otras semanas = term 21 | semana pasada = term 22
*
* Uso: CARTA=<es_id> php demote_old_cartasemana.php (dry-run)
* APPLY=1 CARTA=<es_id> php demote_old_cartasemana.php
@@ -19,11 +16,26 @@ if (!$CARTA) { fwrite(STDERR,"Falta CARTA=<es_id>\n"); exit(1); }
$cs_terms = pll_get_term_translations(6); // cartasemana por idioma
$otras_terms = pll_get_term_translations(21); // cartas de otras semanas por idioma
$last_terms = pll_get_term_translations(22); // carta semana pasada por idioma
$carta_tr = pll_get_post_translations($CARTA);
$last_es_posts = get_posts([
'post_type' => 'post',
'numberposts' => 1,
'post_status' => 'publish',
'fields' => 'ids',
'cat' => 22,
'orderby' => 'date',
'order' => 'DESC',
'suppress_filters' => true,
]);
$last_es = (int) ($last_es_posts[0] ?? 0);
$last_tr = $last_es ? pll_get_post_translations($last_es) : [];
foreach ($cs_terms as $lang=>$cs) {
$keep = $carta_tr[$lang] ?? 0;
$otras = $otras_terms[$lang] ?? 0;
$last = $last_terms[$lang] ?? 0;
$keep_last = $last_tr[$lang] ?? 0;
$posts = get_posts(['post_type'=>'post','numberposts'=>-1,'post_status'=>'any','fields'=>'ids',
'tax_query'=>[['taxonomy'=>'category','field'=>'term_id','terms'=>$cs]]]);
$moved=0;
@@ -35,9 +47,23 @@ foreach ($cs_terms as $lang=>$cs) {
}
$moved++;
}
if ($APPLY) clean_term_cache([$cs,$otras],'category');
$last_posts = $last ? get_posts([
'post_type'=>'post','numberposts'=>-1,'post_status'=>'any','fields'=>'ids',
'tax_query'=>[['taxonomy'=>'category','field'=>'term_id','terms'=>$last]],
]) : [];
$last_removed = 0;
foreach ($last_posts as $pid) {
if ($pid == $keep_last) continue;
if ($APPLY) wp_remove_object_terms($pid, [(int)$last], 'category');
$last_removed++;
}
if ($APPLY && $last && $keep_last) {
wp_set_object_terms($keep_last, [(int)$last], 'category', true);
}
if ($APPLY) clean_term_cache(array_filter([$cs,$otras,$last]),'category');
$t=get_term($cs);
echo sprintf("%s: %s %d | '%s' count=%d keep=#%d\n", strtoupper($lang),
$APPLY?"movidas":"se moverían", $moved, $t->slug, $t->count, $keep);
echo sprintf("%s: %s %d de actual | anterior=#%d (limpia %d) | '%s' keep=#%d\n",
strtoupper($lang), $APPLY?"movidas":"se moverían", $moved,
$keep_last, $last_removed, $t->slug, $keep);
}
echo $APPLY ? "APLICADO\n" : "DRY-RUN (APPLY=1 para aplicar)\n";