Mixbot: cómo funcionan los avatares de autor (y qué pasa cuando creáis uno con /crear-autor) #171

Open
opened 2026-07-10 01:55:09 +00:00 by rafa · 0 comments
Owner

Resumen para Mixbot

Documentación de cómo se gestionan hoy los avatares de autor, a raíz de que ya tenéis el endpoint fea/v1/crear-autor (#166) para dar de alta autores nuevos. Importante: ese endpoint NO toca el avatar. Un autor recién creado se queda con el Gravatar/identicon por defecto de WordPress hasta que alguien (hoy, Rafa) le asigne una foto o un avatar de iniciales a mano. No es automático.

Cómo se renderiza el avatar en el frontend

Dos filtros en wordpress/wp-content/mu-plugins/fea-homepage.php (líneas 199-216) y fea-avatar-cachebust.php:

  1. Filtro get_avatar_url (prioridad 10): lee el meta de usuario foto_perfil (es un campo ACF que guarda el ID de un attachment de WP, no una URL directa). Si existe, sirve wp_get_attachment_image_url($attach_id, 'full'). Si no hay foto_perfil, cae al $url original de WP (Gravatar).
  2. Filtro get_avatar_url (prioridad 20, corre después): añade ?v=<filemtime> a las URLs bajo /avatares/autores/autor-*.png para romper la caché de Cloudflare cuando se regenera la misma foto.

El campo que de verdad importa es foto_perfil (ACF/attachment). Existe también un meta más antiguo fea_foto_url (usado por assign_author_photos.php, un script distinto y más viejo) que no es el que lee el frontend — no lo uséis como referencia, es una pieza suelta de un flujo anterior.

Cómo se genera/asigna un avatar hoy (proceso manual, offline)

Dos caminos, ambos ejecutados a mano por Rafa vía wp eval-file/php en el servidor:

A) Avatar de iniciales (cuando no hay foto real):

  1. scripts/gen_avatars_initials.py — genera un PNG 200×200 con círculo de color (paleta de 10 tonos, determinista por hash MD5 del nombre) + iniciales en blanco. Entrada: TSV uid<TAB>nombre. Salida: wordpress/wp-content/uploads/avatares/autores/autor-<uid>.png.
  2. scripts/import_avatars_143.php (o variantes _75/_90) — da de alta ese PNG como attachment de WP (wp_insert_attachment) y actualiza el meta foto_perfil del usuario para que apunte a él. Es idempotente y hace backup del valor previo (_foto_perfil_pre143, etc.).

B) Foto real (cuando el autor manda una foto):

  • scripts/assign_author_photos.php — asigna fotos ya subidas manualmente a uploads/quienes_somos/avatars/ a un usuario concreto (mapping user_id => fichero.png hardcodeado en el script). Este es el flujo más antiguo, usa el meta fea_foto_url (ver nota arriba — puede que necesite unificarse con foto_perfil en algún momento, hoy son cosas separadas).
  • Para fotos reales de origen Joomla hay recorte facial automático (face_crop_avatar.py, OpenCV) + regeneración de thumbnails (regen_avatars.php).

Qué implica esto para vosotros

  • Cuando creéis un autor nuevo con /crear-autor, esperad que salga sin foto (Gravatar genérico) hasta que Rafa corra el proceso de arriba.
  • No hay endpoint hoy para que subáis vosotros una foto directamente — si os interesa tener eso automatizado (mismo espíritu que /crear-autor: un endpoint acotado tipo fea/v1/subir-avatar que reciba una imagen + user_id y haga el wp_insert_attachment + set de foto_perfil), avisad y lo valoramos como hicimos con el de autores.

Relacionado: #166, #147 (fotos de autoras nuevas, mismo problema manual).

## Resumen para Mixbot Documentación de cómo se gestionan hoy los avatares de autor, a raíz de que ya tenéis el endpoint `fea/v1/crear-autor` (#166) para dar de alta autores nuevos. **Importante: ese endpoint NO toca el avatar.** Un autor recién creado se queda con el Gravatar/identicon por defecto de WordPress hasta que alguien (hoy, Rafa) le asigne una foto o un avatar de iniciales a mano. No es automático. ## Cómo se renderiza el avatar en el frontend Dos filtros en `wordpress/wp-content/mu-plugins/fea-homepage.php` (líneas 199-216) y `fea-avatar-cachebust.php`: 1. Filtro `get_avatar_url` (prioridad 10): lee el meta de usuario **`foto_perfil`** (es un campo ACF que guarda el ID de un *attachment* de WP, no una URL directa). Si existe, sirve `wp_get_attachment_image_url($attach_id, 'full')`. Si no hay `foto_perfil`, cae al `$url` original de WP (Gravatar). 2. Filtro `get_avatar_url` (prioridad 20, corre después): añade `?v=<filemtime>` a las URLs bajo `/avatares/autores/autor-*.png` para romper la caché de Cloudflare cuando se regenera la misma foto. **El campo que de verdad importa es `foto_perfil` (ACF/attachment).** Existe también un meta más antiguo `fea_foto_url` (usado por `assign_author_photos.php`, un script distinto y más viejo) que **no** es el que lee el frontend — no lo uséis como referencia, es una pieza suelta de un flujo anterior. ## Cómo se genera/asigna un avatar hoy (proceso manual, offline) Dos caminos, ambos ejecutados a mano por Rafa vía `wp eval-file`/`php` en el servidor: **A) Avatar de iniciales (cuando no hay foto real):** 1. `scripts/gen_avatars_initials.py` — genera un PNG 200×200 con círculo de color (paleta de 10 tonos, determinista por hash MD5 del nombre) + iniciales en blanco. Entrada: TSV `uid<TAB>nombre`. Salida: `wordpress/wp-content/uploads/avatares/autores/autor-<uid>.png`. 2. `scripts/import_avatars_143.php` (o variantes `_75`/`_90`) — da de alta ese PNG como *attachment* de WP (`wp_insert_attachment`) y actualiza el meta `foto_perfil` del usuario para que apunte a él. Es idempotente y hace backup del valor previo (`_foto_perfil_pre143`, etc.). **B) Foto real (cuando el autor manda una foto):** - `scripts/assign_author_photos.php` — asigna fotos ya subidas manualmente a `uploads/quienes_somos/avatars/` a un usuario concreto (mapping `user_id => fichero.png` hardcodeado en el script). Este es el flujo más antiguo, usa el meta `fea_foto_url` (ver nota arriba — puede que necesite unificarse con `foto_perfil` en algún momento, hoy son cosas separadas). - Para fotos reales de origen Joomla hay recorte facial automático (`face_crop_avatar.py`, OpenCV) + regeneración de thumbnails (`regen_avatars.php`). ## Qué implica esto para vosotros - Cuando creéis un autor nuevo con `/crear-autor`, esperad que salga sin foto (Gravatar genérico) hasta que Rafa corra el proceso de arriba. - No hay endpoint hoy para que subáis vosotros una foto directamente — si os interesa tener eso automatizado (mismo espíritu que `/crear-autor`: un endpoint acotado tipo `fea/v1/subir-avatar` que reciba una imagen + user_id y haga el `wp_insert_attachment` + set de `foto_perfil`), avisad y lo valoramos como hicimos con el de autores. Relacionado: #166, #147 (fotos de autoras nuevas, mismo problema manual).
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: rafa/feadulta#171