Tema clásico 09: seguridad e internacionalización en producción

Endurece el tema clásico aplicando escape/sanitización y deja preparado el proyecto para traducción real con text domain consistente.

Un tema puede verse perfecto y aun así ser inseguro o imposible de traducir correctamente en un proyecto real.

En temas clásicos, la seguridad diaria depende de dos hábitos: validar entradas y escapar salidas en cada contexto.

En paralelo, la internacionalización exige disciplina: text domain único, cadenas envueltas en funciones i18n y carga del dominio en setup.

Si estos fundamentos fallan, el coste aparece en soporte, auditorías y retrabajo cuando el proyecto crece a varios idiomas.

  • No existe un escape universal; cada contexto pide su función específica.
  • Usa esc_html para texto plano, esc_attr para atributos HTML y esc_url para enlaces.
  • Si recibes datos de usuario o de opciones del tema, sanea primero y escapa siempre al renderizar.
  • Evita imprimir variables crudas en atributos o scripts: es uno de los fallos más comunes en temas clásicos.
  • Escapa en el último momento, justo antes del echo.

Seguridad en plantillas: escapar por contexto

No existe un escape universal; cada contexto pide su función específica.

Usa esc_html para texto plano, esc_attr para atributos HTML y esc_url para enlaces.

Si recibes datos de usuario o de opciones del tema, sanea primero y escapa siempre al renderizar.

Evita imprimir variables crudas en atributos o scripts: es uno de los fallos más comunes en temas clásicos.

  • Escapa en el último momento, justo antes del echo.
  • Sanea al guardar, escapa al mostrar.
  • No mezcles HTML y datos sin control.
  • Revisa hooks y template parts también.

Internacionalización correcta del tema

Traducir no es solo envolver cadenas: también debes cargar el dominio y mantener consistencia.

Carga el text domain en after_setup_theme apuntando a /languages del tema.

Envuelve textos de interfaz con __(), _e(), esc_html__ o esc_attr__ según contexto de salida.

Mantén el mismo text domain en todo el código; variarlo por archivo rompe el flujo de traducción.

Checklist previa a release

Antes de publicar, revisa seguridad e i18n como parte obligatoria del QA.

Busca echos directos sin escape y corrige por contexto (html, attr, url).

Verifica que el text domain sea único y que no haya cadenas hardcodeadas sin función de traducción.

Documenta reglas mínimas en el repositorio para que nuevos cambios no reintroduzcan fallos básicos.

  • Sin salida de datos sin escape.
  • Sin cadenas visibles fuera de funciones i18n.
  • Text domain consistente en todo el tema.
  • Revisión en staging antes de tag de versión.
WordPress Themes Pro
19

Tema clásico 09: seguridad e internacionalización en producción

Endurece el tema clásico aplicando escape/sanitización y deja preparado el proyecto para traducción real con text domain consistente.

Código del tema: load_theme_textdomain

📘 Teoría

Seguridad en plantillas: escapar por contexto

No existe un escape universal; cada contexto pide su función específica.

Usa esc_html para texto plano, esc_attr para atributos HTML y esc_url para enlaces.

Si recibes datos de usuario o de opciones del tema, sanea primero y escapa siempre al renderizar.

Evita imprimir variables crudas en atributos o scripts: es uno de los fallos más comunes en temas clásicos.

  • Escapa en el último momento, justo antes del echo.
  • Sanea al guardar, escapa al mostrar.
  • No mezcles HTML y datos sin control.
  • Revisa hooks y template parts también.

Internacionalización correcta del tema

Traducir no es solo envolver cadenas: también debes cargar el dominio y mantener consistencia.

1

Carga el text domain en after_setup_theme apuntando a /languages del tema.

2

Envuelve textos de interfaz con __(), _e(), esc_html__ o esc_attr__ según contexto de salida.

3

Mantén el mismo text domain en todo el código; variarlo por archivo rompe el flujo de traducción.

Checklist previa a release

Antes de publicar, revisa seguridad e i18n como parte obligatoria del QA.

Busca echos directos sin escape y corrige por contexto (html, attr, url).

Verifica que el text domain sea único y que no haya cadenas hardcodeadas sin función de traducción.

Documenta reglas mínimas en el repositorio para que nuevos cambios no reintroduzcan fallos básicos.

  • Sin salida de datos sin escape.
  • Sin cadenas visibles fuera de funciones i18n.
  • Text domain consistente en todo el tema.
  • Revisión en staging antes de tag de versión.

🧪 Aprende probando

🏁 Retos

Reto Reto: cargar dominio de traducción Completa el setup para activar traducciones del tema desde la carpeta languages.

🧰 Recursos

Test

Comprueba tus conocimientos con un test sobre WordPress Themes Pro.

Test de WordPress Themes Pro

¿Qué es esto?

Soy Cristian Eslava y a veces hago webs para procrastinar yo y vosotros. culTest

La hice en febrero de 2026 para facilitar el aprendizaje de mis alumnos. La idea es aprender desarrollo web practicando y que el proyecto siga creciendo con nuevos temas, tests y retos.

Está inspirada en MDN, W3Schools, CodePen, Manz y muchos otros sitios de documentación sobre desarrollo web. Quería combinar teoría útil, ejemplos ejecutables, retos y el sistema de tests que ya tenía en culTest. culTest

Si te gustó, si no te gustó o si quieres escribirme, puedes hacerlo en cristianeslava@gmail.com