483c68bf5f
Envoltorio de sync_audio_to_prod.py para lotes de posts: carga los IDs con un array (mapfile/--ids/--file) antes de cualquier ssh y redirige el stdin del proceso hijo a /dev/null, evitando el bug de un while-read compartiendo stdin con ssh (ssh se come el resto del fichero de IDs y el bucle termina sin error tras procesar solo el primero — visto en real el 2026-08-24, lote de 184 que solo sincronizó 1). Para en el primer fallo real, sin reintentos ciegos, y da un resumen ok/skip al cierre. Documentado en README con ejemplo de uso y variables de entorno.
75 lines
3.2 KiB
Markdown
75 lines
3.2 KiB
Markdown
# feadulta — WordPress
|
|
|
|
Código del sitio WordPress de feadulta.com. Plugins personalizados (mu-plugins) y scripts de migración y mantenimiento.
|
|
|
|
## Estructura
|
|
|
|
```
|
|
mu-plugins/ — plugins WordPress cargados automáticamente (sin activar)
|
|
scripts/ — scripts Python/PHP de migración, traducción, TTS y mantenimiento
|
|
```
|
|
|
|
## mu-plugins principales
|
|
|
|
| Plugin | Función |
|
|
|---|---|
|
|
| `fea-carta-portada.php` | Parser de la carta semanal → portada |
|
|
| `fea-homepage.php` | Tarjetas de portada |
|
|
| `fea-share.php` | Sección "Comparte FeAdulta" (Facebook, Instagram, Imprimir) |
|
|
| `fea-ui.php` | Estilos globales, menú, fondo cálido en artículos |
|
|
| `fea-accesibilidad.php` | Tipografía Atkinson Hyperlegible (self-hosted) + toggle claro/oscuro persistente |
|
|
| `fea-beta-feedback.php` | Barra de feedback beta + endpoint `/fea/v1/lang/{id}` |
|
|
| `fea-search.php` | Buscador móvil nativo |
|
|
| `fea-pensamientos.php` | Widget de pensamientos |
|
|
| `carta-semana-plugin.php` | Redirects carta vigente/semana pasada |
|
|
|
|
## Scripts principales
|
|
|
|
| Script | Función |
|
|
|---|---|
|
|
| `import_new_k2_items.py` | Importar artículos nuevos desde Joomla/K2 |
|
|
| `import_new_cartas.py` | Importar cartas semanales nuevas |
|
|
| `translate_haiku.py` | Traducción automática vía Claude Haiku |
|
|
| `tts_produce.py` | Generación de audio TTS (MiniMax) |
|
|
| `sync_translations_to_prod.py` | Sincronizar traducciones local → producción |
|
|
| `sync_audio_to_prod.py` | Sincronizar UN post/carta de audio TTS local → producción (sube el mp3, verifica SHA-256 remoto y persiste `fea_audio_sha256`) |
|
|
| `sync_audio_bulk.sh` | Envoltorio de `sync_audio_to_prod.py` para lotes: para en el primer fallo, sin reintentos ciegos, resumen ok/skip |
|
|
| `detect_untranslated.php` | Detectar posts sin traducir |
|
|
|
|
## Sincronizar audio TTS a producción (local → prod)
|
|
|
|
`sync_audio_to_prod.py` sube el mp3 de UN post/carta y, desde el #213, calcula y verifica el
|
|
SHA-256 en cada subida (reproducción verificada automática, sin backfill manual — ver #212).
|
|
|
|
Para lotes de varios posts, usar `sync_audio_bulk.sh`: es el envoltorio que añade "parar en el
|
|
primer fallo" (el script Python no lo hace por sí solo, recorre toda la lista y acumula errores).
|
|
Carga los IDs con `mapfile`/mediante array y redirige el stdin de cada invocación a `/dev/null` a
|
|
propósito — un `while read id; do ...ssh...; done < fichero` sin esa precaución se rompe en
|
|
silencio porque `ssh` se come el resto del fichero de IDs (ver
|
|
`feedback-bash-while-read-ssh-stdin` en la memoria del proyecto).
|
|
|
|
```bash
|
|
export FEA_PROD_SSH_HOST="rafa@188.40.120.157"
|
|
export FEA_PROD_DOCKER_CONTAINER="wordpress-r2ssjifwj0r0ghyoqd528uaa"
|
|
|
|
# Dry-run primero, siempre
|
|
scripts/sync_audio_bulk.sh --ids 55519,55520,822 --dry-run
|
|
|
|
# Aplicar de verdad
|
|
scripts/sync_audio_bulk.sh --ids 55519,55520,822
|
|
|
|
# Desde un fichero (un ID por línea) o toda la cola de una carta
|
|
scripts/sync_audio_bulk.sh --file /tmp/ids_pendientes.txt
|
|
scripts/sync_audio_bulk.sh --carta 54254
|
|
```
|
|
|
|
Rollback de un post concreto: `python3 scripts/sync_audio_to_prod.py --rollback --ids <id>`
|
|
(borra el meta en prod, no toca el mp3 local).
|
|
|
|
## Servidor local de desarrollo
|
|
|
|
WordPress corre en Docker local, accesible vía Tailscale:
|
|
`https://farmer.taild3aaf6.ts.net/fea/`
|
|
|
|
Admin: `eqpyk` / `NuevaFeAdulta2024!`
|