Files
feadulta/scripts/remap_carta_tr_links.php
T
rafa 69e849d38e 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.
2026-07-15 20:03:21 -04:00

41 lines
2.0 KiB
PHP

<?php
// Remapea los enlaces internos de las traducciones de una carta: convierte
// permalinks/IDs que apuntan al artículo ES → permalink del artículo en el
// idioma de CADA carta (vía Polylang). Necesario cuando la carta ES se tradujo
// DESPUÉS de haberle fijado los enlaces a permalink (las traducciones heredan
// los permalinks ES). Solo toca traducciones (no la ES). Dry-run por defecto.
require getenv('FEA_WP_LOAD') ?: '/var/www/html/wp-load.php';
global $wpdb;
$APPLY = getenv("APPLY") === "1";
$BAK = "/tmp/remap_carta_tr_bak"; if ($APPLY) @mkdir($BAK,0777,true);
$CARTA = (int)(getenv("CARTA") ?: 53644);
$tr = pll_get_post_translations($CARTA);
$tot = 0;
foreach($tr as $lang=>$pid){
if($lang === 'es') continue; // la ES ya está bien
$post = get_post($pid); if(!$post) continue;
$chg=0; $miss=[];
$new = preg_replace_callback('~href="([^"]+)"~i', function($m) use($lang,&$chg,&$miss){
$href = html_entity_decode(trim($m[1]));
if(stripos($href,'farmer.taild3aaf6.ts.net')===false && stripos($href,'/fea/')===false) return $m[0];
$es = 0;
if(preg_match('~[?&]p=(\d+)~',$href,$mm)) $es=(int)$mm[1]; // forma ?p=ID
if(!$es) $es = (int)url_to_postid($href); // forma /slug/
if(!$es){ return $m[0]; }
if(pll_get_post_language($es) !== 'es'){ return $m[0]; } // solo si apunta a ES
$t = pll_get_post($es,$lang);
if(!$t || $t==$es){ $miss[]=$href; return $m[0]; } // sin traducción → dejar
$url = get_permalink($t);
if(!$url) return $m[0];
$chg++;
return 'href="'.esc_url($url).'"';
}, $post->post_content);
echo sprintf("#%d [%s] «%s» — %d remapeados%s\n",$pid,$lang,mb_substr($post->post_title,0,30),$chg,
$miss?(" | sin traducción: ".count($miss)):"");
$tot+=$chg;
if($APPLY && $chg){ file_put_contents("$BAK/$pid.html",$post->post_content);
$wpdb->update($wpdb->posts,['post_content'=>$new],['ID'=>$pid]); clean_post_cache($pid); }
}
echo ($APPLY?"APLICADO":"DRY-RUN").": $tot enlaces.\n";