Jerarquía de plantillas del tema de bloques de WordPress
La jerarquía completa de plantillas de los temas de bloques (FSE): para cada tipo de petición, la lista ordenada de plantillas que WordPress busca, de la más específica a la más general, con index.html como último recurso. El equivalente de la era de bloques al clásico diagrama de jerarquía.
Para cada solicitud, WordPress busca estas plantillas en orden —de la más específica a la más general— y se detiene en la primera que exista en la carpeta /templates de tu tema. La cadena siempre termina en index.html.
Portada
La portada del sitio, ya sea que muestre tus últimas entradas o una página estática.
- front-page.html
- home.html
- index.html
front-page.html tiene prioridad independientemente de la opción elegida en Ajustes → Lectura. Si la portada es una página estática y no existe front-page.html, se recurre a la cadena de página estática, no a home.html.
Índice de entradas del blog
La página que muestra tus últimas entradas (la «página de entradas» en Ajustes → Lectura).
- home.html
- index.html
Entrada individual
Una entrada individual del blog.
- single-post-{slug}.html
- single-post.html
- single.html
- singular.html
- index.html
Tipo de contenido personalizado individual
Una entrada individual de un tipo de contenido personalizado (por ejemplo, un «libro»).
- single-{post-type}-{slug}.html
- single-{post-type}.html
- single.html
- singular.html
- index.html
Para un tipo de contenido «book» con slug «dune»: single-book-dune.html, luego single-book.html y por último single.html.
Página estática
Una página normal de WordPress.
- page-{slug}.html
- page-{id}.html
- page.html
- singular.html
- index.html
Página con una plantilla personalizada
Una página a la que se le ha asignado una plantilla personalizada en el panel Plantilla del editor.
- {custom-template}.html
- page-{slug}.html
- page-{id}.html
- page.html
- singular.html
- index.html
Las plantillas personalizadas se declaran en el array customTemplates de theme.json y se ubican en /templates. La que se asigna tiene prioridad sobre toda la cadena de página.
Archivo de categoría
El archivo que muestra las entradas de una categoría.
- category-{slug}.html
- category-{id}.html
- category.html
- archive.html
- index.html
Archivo de etiqueta
El archivo que muestra las entradas con una etiqueta.
- tag-{slug}.html
- tag-{id}.html
- tag.html
- archive.html
- index.html
Archivo de taxonomía personalizada
El archivo de un término de una taxonomía personalizada.
- taxonomy-{taxonomy}-{term}.html
- taxonomy-{taxonomy}.html
- taxonomy.html
- archive.html
- index.html
Archivo de autor
El archivo de las entradas de un autor.
- author-{nicename}.html
- author-{id}.html
- author.html
- archive.html
- index.html
Archivo por fecha
Un archivo por año, mes o día.
- date.html
- archive.html
- index.html
Archivo de tipo de contenido
El índice de archivo de un tipo de contenido personalizado que tiene has_archive activado.
- archive-{post-type}.html
- archive.html
- index.html
Resultados de búsqueda
La página de resultados de una búsqueda en el sitio.
- search.html
- index.html
404 (no encontrado)
Se muestra cuando ningún contenido coincide con la URL.
- 404.html
- index.html
Página de adjunto
La página de un único archivo adjunto multimedia.
- attachment.html
- single.html
- singular.html
- index.html
Muchos sitios desactivan por completo las páginas de adjuntos (son contenido de poco valor). Si las mantienes, esta es la cadena.
Página de política de privacidad
La página establecida como política de privacidad del sitio en los Ajustes.
- page-privacy-policy.html
- privacy-policy.html
- page.html
- singular.html
- index.html
En qué se diferencia esto de la jerarquía clásica (PHP)
- Las plantillas son archivos .html en /templates, no archivos .php en la raíz del tema. No existe single.php: es single.html.
- Las regiones reutilizables (cabecera, pie de página) son PARTES de plantilla en /parts, referenciadas con el bloque wp:template-part, no con llamadas PHP get_header() / get_footer().
- No hay cadena de get_template_part() ni get_header()/get_footer(). La composición se realiza con el bloque Parte de plantilla dentro de los archivos .html.
- index.html es OBLIGATORIO. Un block theme sin templates/index.html no es un block theme válido: es el respaldo final obligatorio para cada ruta anterior.
- Un tema se declara como block theme por la PRESENCIA de templates/index.html junto con un theme.json, no mediante ninguna marca en la cabecera.
- Puedes editar cualquiera de estas plantillas en el Editor del sitio (Apariencia → Editor) y guardar los cambios en la base de datos, que entonces TIENEN PRIORIDAD sobre los archivos del tema hasta que borres la personalización. Esto sorprende a quienes depuran «¿por qué mi cambio de plantilla no hace nada?».