# 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/ ```