Preparación para wordpress.org¶
21/10/2026 · Nada se ha publicado. Este documento responde a una pregunta concreta: ¿se puede publicar esto en el directorio de WordPress? La respuesta, medida: sí, los ocho plugins y el tema pasan las comprobaciones automáticas y el checklist; lo que queda son decisiones de producto (ver el final), no defectos.
Cómo se ha medido¶
Tres capas, y ninguna se fía de la memoria:
- Plugin Check (PCP) en el CI de cada repo, sobre el paquete limpio —nunca sobre el árbol de desarrollo, que produce errores fantasma—. Versión fijada y cacheada. El tema usa Theme Check.
- Auditor propio:
convoca-health-check/scripts/check-wporg-requisitos.py, que mide lo que PCP no mira (coherencia del readme,Tested up tocontra la última de WordPress,Requires Plugins, dominio de texto, licencia, código ofuscado, recursos de fuera, servicios externos,.distignore). - Checklist a mano, con la respuesta escrita por plugin.
Resultado por plugin¶
| plugin | versión | PCP | auditor | observe |
|---|---|---|---|---|
| convoca-core | 2.3.48 | ✅ | ✅ 0 puntos | no declara Requires Plugins (es el requisito de los demás) |
| convoca-members | 2.9.17 | ✅ | ✅ 0 puntos | Requires Plugins: convoca-core |
| convoca-enroll | 2.7.67 | ✅ | ✅ 0 puntos | Requires Plugins: convoca-core |
| convoca-gateway | 2.13.22 | ✅ | ✅ 0 puntos | Requires Plugins: convoca-core |
| convoca-shifts | 2.5.34 | ✅ | ✅ 0 puntos | Requires Plugins: convoca-core |
| convoca-courses | 0.2.3 | ✅ | ✅ 0 puntos | Requires Plugins: convoca-core |
| convoca-publisher | 1.22.12 | ✅ | ✅ 0 puntos | Requires Plugins: convoca-core |
| convoca-assistant | 0.2.21 | ✅ | ✅ 0 puntos | autónomo: no debe declararlo |
| convoca-theme | 2.9.41 | ✅ Theme Check | — | los requisitos de temas son otros; los vigila Theme Check |
Lo que estaba mal y se ha corregido¶
La primera pasada real del auditor dio 17 puntos en 8 plugins. Ninguno se arregló «a ojo»:
Tested up to: 7.1cuando WordPress va por 7.1.3 (en los ocho y en el tema). El directorio exige la última versión. Se declara 7.1.3 porque es la que corren demo y Lugg —comprobado conwp core version—, no por rellenar el campo..distignoresin.htaccessen los ocho. El empaquetador ya los quitaba, pero la exclusión ahora está declarada: una línea por repo, y el paquete no puede llevárselos ni por descuido.- FullCalendar se cargaba desde
cdn.jsdelivr.net(shifts). Este era el único bloqueante de código: wordpress.org no admite recursos de terceros (EnqueuedResourceOffloading). La librería viaja ahora enassets/vendor/fullcalendar/(v6.1.15, con su banner de licencia) y se sirve desde el propio plugin. De paso, el calendario deja de depender de un CDN externo. - Tres falsos positivos del auditor, corregidos en el auditor:
base64_decode()en la firma de Redsys, en los tokens de OAuth y en el cifrado del publisher no es código ofuscado —es descifrar datos—. El patrón ahora busca ejecución dinámica (eval,assert,create_function,gzinflate), no decodificación.
Comprobaciones que importan y no son de estilo¶
- El paquete es el que se audita.
pack-plugin.pygeneravendor/de producción (composer install --no-dev): wordpress.org no ejecuta composer, y un paquete sinvendor/es un plugin que no carga. Verificado en el paquete de shifts: 50 ficheros, con FullCalendar dentro y el mismo md5 que en el repo. assets/vendor/sí viaja: el patrónvendor/del.distignorecompara por raíz (rel.startswith("vendor/")), así que no alcanza aassets/vendor/. Comprobado empaquetando, no leyendo el patrón.- Nada de datos de clientes en código, textos, fixtures ni
.pot: lo vigila el guardián de higiene en el CI de los diez repos, con la lista fuera de los repos (secret). - Un plugin no provee la funcionalidad de otro: lo vigila el guardián de acoplamiento, estrenado esta semana tras limpiar el mismo defecto en cuatro plugins.
Lo que queda, y no es código¶
Requires Plugins: convoca-coreapunta a un plugin que aún no está en el directorio. La instalación desde wordpress.org no resolverá esa dependencia hasta que core esté publicado. Decisión de producto: publicar core primero (y esperar a que la acción oficial lo vea) o dejar el ecosistema como está hasta tener los siete listos a la vez.- Capturas del panel. Los readme tienen la sección, pero las imágenes de la ficha del directorio se suben aparte y conviene que no muestren datos de ningún cliente.
- Servicios externos: los plugins que llaman a Redsys/Stripe lo declaran. Si se añade otro, su sección en el readme es obligatoria.
Conclusión¶
Los ocho plugins y el tema pasan el corte automático y el checklist está contestado por escrito. El único defecto de código que quedaba (el CDN del calendario) está corregido y verificado en el paquete.
Publicar es una decisión de Jose Carlos, no un paso de este trabajo: no se ha enviado nada a wordpress.org —ni zip, ni SVN, ni solicitud de revisión—.