Pensamientos: arreglar índice /pensamientos/ (galería sin duplicar) + pensamiento aleatorio al final de los artículos #86

Closed
opened 2026-06-28 19:14:22 +00:00 by rafa · 0 comments
Owner

Labels: area:content, area:joomla, area:plugin, improvement

Resumen

Dos cosas independientes sobre los "Pensamientos" (reflexiones: imágenes con una frase), reutilizando la carpeta que ya tiene Joomla sin duplicar ficheros (~171 MB / ~1.924 imágenes):

  1. Arreglar el índice de pensamientos en WP (página /pensamientos/, post ID 17910) que hoy no funciona.
  2. Mostrar un pensamiento aleatorio dentro de los artículos, al final del contenido.

El carrusel del hero NO se toca. Se queda como está: 3 fotos fijas que se configuran a mano subiendo las 3 últimas a uploads/home/ (lo gestiona fea-slider-sync.php, issue #43). Esto no entra en este issue.

Documentado para implementar desde cero contexto (lo puede ejecutar Claude o Codex). Datos verificados el 2026-06-15 contra el repo local y el servidor de producción por SSH.


La carpeta de Pensamientos (fuente única, no duplicar)

  • Producción (Joomla vivo): /web/images/Pensamientos/1.924 ficheros, 171 MB. Servido por Joomla en https://feadulta.com/images/Pensamientos/<fichero>.
  • Local (repo joomla-migration): joomla/images/Pensamientos/ → 1.907 ficheros, 169 MB. Servido por el contenedor joomla-web en https://farmer.taild3aaf6.ts.net/joomla/images/Pensamientos/<fichero>.
  • Ficheros pausa_<N>.jpg (1.904 jpg + 3 png). Los recientes usan sufijos crecientes pausa_999999000NNN.jpg (NNN mayor = más reciente). En prod los mtimes son fiables y coinciden con el orden por nombre; en local todos tienen el mismo mtime (copia masiva).
  • Premisa central: WP NO debe copiar estos ficheros. wp-nuevo vive en /web/wp-nuevo/ en el mismo servidor que el Joomla (/web/), así que las imágenes ya están accesibles en disco (/web/images/Pensamientos/) y por URL (feadulta.com/images/...). Se referencian, no se duplican.

Helper común recomendado

Crear un mu-plugin fea-pensamientos.php con un helper que liste la carpeta y construya las URLs públicas, con constantes configurables por entorno:

FEA_PENS_DIR  = path en disco para listar
FEA_PENS_URL  = base URL pública para <img src>

PROD:  FEA_PENS_DIR = '/web/images/Pensamientos'
       FEA_PENS_URL = 'https://feadulta.com/images/Pensamientos'
LOCAL: FEA_PENS_DIR = '/var/www/joomla-images/Pensamientos'   (ver montaje)
       FEA_PENS_URL = 'https://farmer.taild3aaf6.ts.net/joomla/images/Pensamientos'
  • Cachear el listado (transient ~10 min o invalidación por mtime del directorio): son ~1.900 ficheros, no hacer scandir en cada pageview.
  • Montaje en LOCAL: el contenedor wordpress-web solo monta ./wordpress. Para poder listar la carpeta de Joomla, añadir en docker-compose.yml un volumen read-only a wordpress-web: ./joomla/images/Pensamientos:/var/www/joomla-images/Pensamientos:ro. En prod no hace falta montar nada.
  • Cutover DNS (~jun 2026): tras el cutover feadulta.com será WP; las imágenes seguirán en disco en /web/images/Pensamientos/ si no se borran, pero FEA_PENS_URL puede cambiar. Por eso es constante configurable. Documentar valor pre/post-cutover.

Tarea 1 — Arreglar el índice de pensamientos

Estado actual (causa del fallo): la página existe como post WP ID 17910, slug pensamientos (/pensamientos/), pero está en draft y su contenido es un shortcode de Phoca Gallery de Joomla que la migración no tradujo:

<p>{gallery}Pensamientos{/gallery}</p>

WordPress no entiende {gallery}...{/gallery} → se renderiza como texto literal / la página no muestra nada. Eso es lo que "ha dejado de funcionar".

Hay otra página igual de rota: post ID 18943 (/1jornadafeadulta/, draft) con {gallery}1jornada_feadulta{/gallery} → carpeta images/1jornada_feadulta/. Conviene que el arreglo sea genérico para {gallery}NOMBRE{/gallery}.

Qué hacer:

  • Registrar un handler genérico que convierta {gallery}NOMBRE{/gallery} (o un shortcode equivalente [fea_galeria dir="Pensamientos"]) en una galería que lea images/NOMBRE/ (vía el helper) y renderice un grid responsive con lightbox, sin duplicar ficheros (las <img> apuntan a FEA_PENS_URL).
  • Para Pensamientos: 1.924 imágenes es mucho para una sola página → paginar o lazy-load (cargar por bloques al hacer scroll). Orden de la galería: el más natural para un índice es reciente primero (igual criterio que el resto), aunque para un archivo histórico también vale ascendente; decidir al implementar (recomendado: reciente primero).
  • Publicar el post 17910 (pasar de draft a publish) y verificar el enlace de menú /pensamientos/ (en prod "apuntaba a una carta" estando en draft).

Tarea 2 — Pensamiento aleatorio dentro de los artículos

Ubicación elegida: al final del artículo, tras el contenido y antes de la navegación/comentarios, con un encabezado tipo separador ("Una pausa", a afinar copy). Markup ligero, imagen del archivo servida desde FEA_PENS_URL.

Título · Autor · fecha
Párrafos del artículo ...
── Una pausa ──
┌─────────────────┐
│  [pensamiento]  │   <- aleatorio de images/Pensamientos/
└─────────────────┘
← anterior   siguiente →
Comentarios

Implementación:

  • Shortcode [fea_reflexion_aleatoria] que elige una imagen al azar de TODO images/Pensamientos/ (helper → random del listado completo) y la renderiza con encabezado.
  • Inyección automática al final del contenido vía filtro the_content (preferible a editar la plantilla FSE single, ID 42359), solo en is_single() y solo en posts no excluidos.
  • Exclusiones (NO mostrar el pensamiento): lecturas del evangelio y textos bíblicos. Categorías candidatas a excluir (confirmar con Rafa):
    • 1645 Lecturas bíblicas
    • 1647 Comentarios al evangelio
    • 28 evangelios-y-comentarios (los 4 posts evangelio IDs 43906–43909)
    • (¿1648 Eucaristía? — a decidir)
    • Dejar la lista de exclusión como constante configurable.
  • Tipos: aplica a artículos/posts. El usuario mencionó también "comentario" — si se refiere a poder mostrarlo en la zona de comentarios, queda cubierto por la posición "al final". (Aclarar si quiere algo específico por comentario.)
  • Aleatoriedad: por request, o "del día" cacheado si se prefiere consistencia (decisión menor de producto).
  • Copy del encabezado (elegir/afinar): "Una pausa para el alma", "Detente un instante", "Reflexión del momento", "Tu pausa de hoy".

Plan de implementación

  1. Helper + config (fea-pensamientos.php): listado ordenado + caché + constantes FEA_PENS_DIR/FEA_PENS_URL. Volumen read-only en docker-compose.yml para local.
  2. Tarea 1: handler {gallery} genérico + galería paginada; publicar post 17910; verificar 18943.
  3. Tarea 2: shortcode [fea_reflexion_aleatoria] + filtro the_content con exclusiones; ubicación al final.
  4. Deploy a prod (/web/wp-nuevo): subir mu-plugin (scp NO va → ssh '... cat > ruta'; sin proc_open); ajustar constantes a valores de prod; verificar server-side (wp eval) o con Rafa (Cloudflare bloquea headless).

Ficheros y referencias

  • wordpress/wp-content/mu-plugins/fea-homepage.php — shortcodes portada, fea_card().
  • Post índice: WP ID 17910 (/pensamientos/, draft) — contiene {gallery}Pensamientos{/gallery}. Otra: ID 18943.
  • Plantilla single FSE: wp_posts ID 42359.
  • Carpeta fuente: prod /web/images/Pensamientos/, local joomla/images/Pensamientos/.
  • Categorías: ver tabla de term_ids en la wiki/memoria feadulta.

Criterios de aceptación

  • /pensamientos/ (post 17910) publicado y mostrando la galería de images/Pensamientos/, sin haber copiado las imágenes a WP.
  • El handler funciona también para {gallery}1jornada_feadulta{/gallery} (post 18943).
  • Cada artículo no excluido muestra al final un pensamiento aleatorio del archivo.
  • Las lecturas de evangelio / textos bíblicos NO muestran pensamiento.
  • Funciona en local y prod; constantes por entorno documentadas; comportamiento tras cutover previsto.
  • No se duplican los ~171 MB en el almacenamiento de WP.
  • El carrusel del hero queda intacto.
**Labels:** area:content, area:joomla, area:plugin, improvement ## Resumen Dos cosas independientes sobre los **"Pensamientos"** (reflexiones: imágenes con una frase), reutilizando la carpeta que ya tiene Joomla **sin duplicar ficheros** (~171 MB / ~1.924 imágenes): 1. **Arreglar el índice de pensamientos en WP** (página `/pensamientos/`, post **ID 17910**) que hoy no funciona. 2. **Mostrar un pensamiento aleatorio dentro de los artículos**, al final del contenido. > **El carrusel del hero NO se toca.** Se queda como está: 3 fotos fijas que se configuran a mano subiendo las 3 últimas a `uploads/home/` (lo gestiona `fea-slider-sync.php`, issue #43). Esto no entra en este issue. > Documentado para implementar desde cero contexto (lo puede ejecutar Claude o Codex). Datos **verificados el 2026-06-15** contra el repo local y el servidor de producción por SSH. --- ## La carpeta de Pensamientos (fuente única, no duplicar) - **Producción (Joomla vivo):** `/web/images/Pensamientos/` → **1.924 ficheros, 171 MB**. Servido por Joomla en `https://feadulta.com/images/Pensamientos/<fichero>`. - **Local (repo `joomla-migration`):** `joomla/images/Pensamientos/` → 1.907 ficheros, 169 MB. Servido por el contenedor `joomla-web` en `https://farmer.taild3aaf6.ts.net/joomla/images/Pensamientos/<fichero>`. - Ficheros `pausa_<N>.jpg` (1.904 jpg + 3 png). Los recientes usan sufijos crecientes `pausa_999999000NNN.jpg` (NNN mayor = más reciente). En **prod** los mtimes son fiables y coinciden con el orden por nombre; en **local** todos tienen el mismo mtime (copia masiva). - **Premisa central:** WP NO debe copiar estos ficheros. `wp-nuevo` vive en `/web/wp-nuevo/` en el **mismo servidor** que el Joomla (`/web/`), así que las imágenes ya están accesibles en disco (`/web/images/Pensamientos/`) y por URL (`feadulta.com/images/...`). Se referencian, no se duplican. ### Helper común recomendado Crear un mu-plugin `fea-pensamientos.php` con un helper que liste la carpeta y construya las URLs públicas, con constantes configurables por entorno: ``` FEA_PENS_DIR = path en disco para listar FEA_PENS_URL = base URL pública para <img src> PROD: FEA_PENS_DIR = '/web/images/Pensamientos' FEA_PENS_URL = 'https://feadulta.com/images/Pensamientos' LOCAL: FEA_PENS_DIR = '/var/www/joomla-images/Pensamientos' (ver montaje) FEA_PENS_URL = 'https://farmer.taild3aaf6.ts.net/joomla/images/Pensamientos' ``` - Cachear el listado (transient ~10 min o invalidación por mtime del directorio): son ~1.900 ficheros, no hacer `scandir` en cada pageview. - **Montaje en LOCAL:** el contenedor `wordpress-web` solo monta `./wordpress`. Para poder *listar* la carpeta de Joomla, añadir en `docker-compose.yml` un volumen read-only a `wordpress-web`: `./joomla/images/Pensamientos:/var/www/joomla-images/Pensamientos:ro`. En **prod no hace falta montar nada**. - **Cutover DNS (~jun 2026):** tras el cutover `feadulta.com` será WP; las imágenes seguirán en disco en `/web/images/Pensamientos/` si no se borran, pero `FEA_PENS_URL` puede cambiar. Por eso es constante configurable. Documentar valor pre/post-cutover. --- ## Tarea 1 — Arreglar el índice de pensamientos **Estado actual (causa del fallo):** la página existe como post WP **ID 17910**, slug `pensamientos` (`/pensamientos/`), pero está en **draft** y su contenido es un shortcode de **Phoca Gallery de Joomla que la migración no tradujo**: ``` <p>{gallery}Pensamientos{/gallery}</p> ``` WordPress no entiende `{gallery}...{/gallery}` → se renderiza como texto literal / la página no muestra nada. Eso es lo que "ha dejado de funcionar". > Hay **otra** página igual de rota: post **ID 18943** (`/1jornadafeadulta/`, draft) con `{gallery}1jornada_feadulta{/gallery}` → carpeta `images/1jornada_feadulta/`. Conviene que el arreglo sea **genérico** para `{gallery}NOMBRE{/gallery}`. **Qué hacer:** - Registrar un handler genérico que convierta `{gallery}NOMBRE{/gallery}` (o un shortcode equivalente `[fea_galeria dir="Pensamientos"]`) en una galería que lea `images/NOMBRE/` (vía el helper) y renderice un grid responsive con lightbox, **sin duplicar ficheros** (las `<img>` apuntan a `FEA_PENS_URL`). - Para Pensamientos: 1.924 imágenes es mucho para una sola página → **paginar** o lazy-load (cargar por bloques al hacer scroll). Orden de la galería: el más natural para un índice es **reciente primero** (igual criterio que el resto), aunque para un archivo histórico también vale ascendente; decidir al implementar (recomendado: reciente primero). - **Publicar** el post 17910 (pasar de draft a publish) y verificar el enlace de menú `/pensamientos/` (en prod "apuntaba a una carta" estando en draft). --- ## Tarea 2 — Pensamiento aleatorio dentro de los artículos **Ubicación elegida:** **al final del artículo**, tras el contenido y antes de la navegación/comentarios, con un encabezado tipo separador ("Una pausa", a afinar copy). Markup ligero, imagen del archivo servida desde `FEA_PENS_URL`. ``` Título · Autor · fecha Párrafos del artículo ... ── Una pausa ── ┌─────────────────┐ │ [pensamiento] │ <- aleatorio de images/Pensamientos/ └─────────────────┘ ← anterior siguiente → Comentarios ``` **Implementación:** - Shortcode `[fea_reflexion_aleatoria]` que elige **una** imagen al azar de TODO `images/Pensamientos/` (helper → random del listado completo) y la renderiza con encabezado. - Inyección automática al final del contenido vía filtro `the_content` (preferible a editar la plantilla FSE single, ID **42359**), **solo en `is_single()`** y solo en posts no excluidos. - **Exclusiones (NO mostrar el pensamiento):** lecturas del evangelio y textos bíblicos. Categorías candidatas a excluir (confirmar con Rafa): - `1645` Lecturas bíblicas - `1647` Comentarios al evangelio - `28` evangelios-y-comentarios (los 4 posts evangelio IDs 43906–43909) - (¿`1648` Eucaristía? — a decidir) - Dejar la lista de exclusión como constante configurable. - Tipos: aplica a artículos/posts. El usuario mencionó también "comentario" — si se refiere a poder mostrarlo en la zona de comentarios, queda cubierto por la posición "al final". (Aclarar si quiere algo específico por comentario.) - Aleatoriedad: por request, o "del día" cacheado si se prefiere consistencia (decisión menor de producto). - Copy del encabezado (elegir/afinar): *"Una pausa para el alma"*, *"Detente un instante"*, *"Reflexión del momento"*, *"Tu pausa de hoy"*. --- ## Plan de implementación 1. **Helper + config** (`fea-pensamientos.php`): listado ordenado + caché + constantes `FEA_PENS_DIR`/`FEA_PENS_URL`. Volumen read-only en `docker-compose.yml` para local. 2. **Tarea 1:** handler `{gallery}` genérico + galería paginada; publicar post 17910; verificar 18943. 3. **Tarea 2:** shortcode `[fea_reflexion_aleatoria]` + filtro `the_content` con exclusiones; ubicación al final. 4. **Deploy a prod** (`/web/wp-nuevo`): subir mu-plugin (scp NO va → `ssh '... cat > ruta'`; sin `proc_open`); ajustar constantes a valores de prod; verificar server-side (`wp eval`) o con Rafa (Cloudflare bloquea headless). ## Ficheros y referencias - `wordpress/wp-content/mu-plugins/fea-homepage.php` — shortcodes portada, `fea_card()`. - Post índice: WP **ID 17910** (`/pensamientos/`, draft) — contiene `{gallery}Pensamientos{/gallery}`. Otra: **ID 18943**. - Plantilla single FSE: `wp_posts` ID **42359**. - Carpeta fuente: prod `/web/images/Pensamientos/`, local `joomla/images/Pensamientos/`. - Categorías: ver tabla de term_ids en la wiki/memoria feadulta. ## Criterios de aceptación - [ ] `/pensamientos/` (post 17910) publicado y mostrando la galería de `images/Pensamientos/`, **sin** haber copiado las imágenes a WP. - [ ] El handler funciona también para `{gallery}1jornada_feadulta{/gallery}` (post 18943). - [ ] Cada artículo no excluido muestra al final un pensamiento aleatorio del archivo. - [ ] Las lecturas de evangelio / textos bíblicos NO muestran pensamiento. - [ ] Funciona en local y prod; constantes por entorno documentadas; comportamiento tras cutover previsto. - [ ] No se duplican los ~171 MB en el almacenamiento de WP. - [ ] El carrusel del hero queda intacto.
rafa closed this issue 2026-06-28 19:14:22 +00:00
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: rafa/feadulta#86