# Actualizar WordPress local desde Joomla produccion

Runbook para refrescar la copia local migrada a WordPress con los ultimos
articulos visibles en Joomla produccion.

## Contexto

- Repo local: `/home/rafa/joomla-migration`
- WordPress local: `https://farmer.taild3aaf6.ts.net/fea/`
- WordPress DB local: contenedor `wordpress-mysql`, base `wordpress_db`
- WordPress web local: contenedor `wordpress-web`
- Joomla produccion esta detras de Cloudflare. Para leer el origen se uso:

```bash
curl --resolve www.feadulta.com:443:134.0.10.170 -k -L \
  -A "Mozilla/5.0 Codex Feadulta" https://www.feadulta.com/es/
```

El acceso SSH/MySQL de produccion documentado en scripts antiguos puede estar
rotado. Si falla, no asumir que los scripts historicos funcionan contra DB real.

## Flujo preferente

Si hay credenciales actuales o dump de produccion, usar una sincronizacion desde
base de datos. Los scripts historicos que documentan el modelo son:

- `scripts/import_new_k2_items.py`
- `scripts/import_new_cartas.py`
- `scripts/import_new_content.py`
- `scripts/fix_imported_k2_metas.py`
- `scripts/regenerar_clasificacion_csv.py`
- `scripts/aplicar_clasificacion_a_bd.py`

Ojo con `scripts/import_new_k2_items.py`: la version historica lee
`LAST_INSERT_ID()` en otra conexion, asi que puede devolver `0`. En el delta de
2026 se corrigieron metadatos con el offset `wp_id = k2_id + 26040`.

## Flujo de contingencia: HTML publico

Cuando no hay acceso a la DB de Joomla produccion, usar:

```bash
python3 scripts/import_public_joomla_delta.py
python3 scripts/import_public_joomla_delta.py --apply
```

El primer comando es dry-run. El segundo escribe en WordPress local.

Este importador:

- lee las cartas visibles configuradas en `CARTAS`;
- recorre los enlaces de esas cartas;
- importa solo IDs superiores al maximo ya presente en WordPress;
- conserva `_fgj2wp_old_k2_id` y `_fgj2wp_old_content_id`;
- asigna `Idioma=1`;
- asigna `_carta_id` a los K2 importados;
- clasifica por seccion de la carta:
  `lecturas-biblicas`, `comentario-editorial`,
  `comentarios-al-evangelio`, `eucaristia`, `multimedia`, `articulos`.

Limitacion importante: este flujo solo ve contenido enlazado desde las cartas
publicas actuales. No detecta articulos ocultos, no publicados o no enlazados.

## Preparar una semana nueva

1. Localizar las cartas visibles en produccion:

```bash
curl --resolve www.feadulta.com:443:134.0.10.170 -k -L \
  -A "Mozilla/5.0 Codex Feadulta" \
  https://www.feadulta.com/es/ayuda/esta-semana.html

curl --resolve www.feadulta.com:443:134.0.10.170 -k -L \
  -A "Mozilla/5.0 Codex Feadulta" \
  https://www.feadulta.com/es/ayuda/semana-pasada.html

curl --resolve www.feadulta.com:443:134.0.10.170 -k -L \
  -A "Mozilla/5.0 Codex Feadulta" \
  https://www.feadulta.com/es/ayuda/otras-semanas.html
```

2. Actualizar `CARTAS` en `scripts/import_public_joomla_delta.py` con:

- `content_id`
- URL relativa
- fecha de publicacion
- categorias de carta:
  - actual: `[TERM_CARTA_SEMANA, TERM_CARTAS_OTRAS, TERM_FEADULTA]`
  - semana pasada: `[TERM_CARTAS_OTRAS, TERM_CARTA_PASADA, TERM_FEADULTA]`
  - otras semanas: `[TERM_CARTAS_OTRAS, TERM_FEADULTA]`

3. Ejecutar dry-run y comprobar conteos:

```bash
python3 scripts/import_public_joomla_delta.py
```

4. Aplicar:

```bash
python3 scripts/import_public_joomla_delta.py --apply
```

## Verificaciones

Maximos importados:

```bash
docker exec wordpress-mysql mysql \
  -u wordpress_user -pwordpress_pass wordpress_db \
  --default-character-set=utf8mb4 -B -e "
SELECT meta_key,
       MIN(CAST(meta_value AS UNSIGNED)) min_id,
       MAX(CAST(meta_value AS UNSIGNED)) max_id,
       COUNT(*) n
FROM wp_postmeta
WHERE meta_key IN ('_fgj2wp_old_k2_id','_fgj2wp_old_content_id')
GROUP BY meta_key;"
```

Delta exacto para un corte dado:

```bash
docker exec wordpress-mysql mysql \
  -u wordpress_user -pwordpress_pass wordpress_db \
  --default-character-set=utf8mb4 -B -e "
SELECT pm.meta_key, COUNT(DISTINCT pm.post_id) n
FROM wp_postmeta pm
WHERE (pm.meta_key='_fgj2wp_old_k2_id'
       AND CAST(pm.meta_value AS UNSIGNED) > 18102)
   OR (pm.meta_key='_fgj2wp_old_content_id'
       AND CAST(pm.meta_value AS UNSIGNED) > 9133)
GROUP BY pm.meta_key;"
```

Portada:

```bash
curl -k -L --max-time 20 -sS \
  https://farmer.taild3aaf6.ts.net/fea/ \
  | rg -n "La puerta pequeña|Carta de la semana"
```

## Carrusel de portada

El carrusel no depende de imagen destacada de posts. Se sincroniza desde:

```text
wordpress/wp-content/uploads/home/
```

El plugin responsable es:

```text
wordpress/wp-content/mu-plugins/fea-slider-sync.php
```

Ese plugin replica el modelo Joomla `images/home/` y sincroniza Smart Slider 3
slider `2`.

Detectar imagenes actuales en produccion:

```bash
curl --resolve www.feadulta.com:443:134.0.10.170 -k -L \
  --max-time 20 -sS -A "Mozilla/5.0 Codex Feadulta" \
  https://www.feadulta.com/es/ \
  | rg -o 'images/home/[^"'"'"') ]+'
```

Procedimiento:

1. Mover las imagenes antiguas fuera de `uploads/home/`.
2. Descargar las nuevas desde `https://www.feadulta.com/images/home/...`.
3. Copiarlas al contenedor si el host no tiene permisos de escritura:

```bash
docker cp /tmp/pausa_999999000944.jpg \
  wordpress-web:/var/www/html/wp-content/uploads/home/pausa_999999000944.jpg
```

4. Ajustar propietario:

```bash
docker exec wordpress-web chown www-data:www-data \
  /var/www/html/wp-content/uploads/home/pausa_999999000944.jpg
```

5. Forzar resync:

```bash
docker exec wordpress-web \
  wp eval "var_export(fea_slider_home_sync_now(true));" --allow-root
```

6. Verificar Smart Slider:

```bash
docker exec wordpress-mysql mysql \
  -u wordpress_user -pwordpress_pass wordpress_db \
  --default-character-set=utf8mb4 -B -e "
SELECT id,title,thumbnail,params
FROM wp_nextend2_smartslider3_slides
WHERE slider=2
ORDER BY ordering;"
```

## Acceso wp-admin local

URL:

```text
https://farmer.taild3aaf6.ts.net/fea/wp-admin
```

Administradores vistos en la copia local:

- `calvo`
- `eqpyk`
- `icalvotorre`
- `josek`
- `pabloarias`
- `andrey`

Si no se conoce la clave, resetear una cuenta local:

```bash
docker exec wordpress-web \
  wp user update calvo --user_pass='FeAdulta2024!' --allow-root
```

Comprobar rol:

```bash
docker exec wordpress-web \
  wp user get calvo --fields=ID,user_login,user_email,roles,display_name \
  --allow-root
```

Si el login sigue fallando despues del reset, probar ventana privada o borrar
cookies de `farmer.taild3aaf6.ts.net`.

## Estado del delta 2026-06-14

En la actualizacion del 14 de junio de 2026 se importaron:

- `46` items K2, de `18103` a `18161`;
- `14` articulos `content`, de `9134` a `9150`;
- cartas:
  - `9136` / `Uno y Trino`
  - `9143` / `20 años de fe adulta`
  - `9150` / `La puerta pequeña`

Carrusel actualizado de:

- `pausa_999999000941.jpg`
- `pausa_999999000942.jpg`
- `pausa_999999000943.jpg`

a:

- `pausa_999999000944.jpg`
- `pausa_999999000945.jpg`
- `pausa_999999000946.jpg`

Las imagenes antiguas quedaron en:

```text
wordpress/wp-content/uploads/home-old-20260614/
```
