Jerarquía de Plantillas de WordPress: La Guía Técnica Completa
La Jerarquía de Plantillas de WordPress es el sistema de resolución determinista que WordPress utiliza para seleccionar qué archivo de plantilla PHP renderiza una solicitud de página determinada. Cuando un visitante carga cualquier URL en su sitio, WordPress evalúa el contexto de la consulta — tipo de publicación, taxonomía, slug, ID y más — luego recorre una lista priorizada de nombres de archivo candidatos hasta encontrar una coincidencia en el directorio de su tema activo. Si no existe ninguna plantilla específica, recurre a index.php.
Comprender este sistema a un nivel profundo no es opcional para el desarrollo serio de WordPress. Es la base de cada diseño personalizado, cada anulación de tema y cada optimización de rendimiento que involucra el almacenamiento en caché de plantillas. Ya sea que esté ejecutando una publicación con mucho contenido, una tienda WooCommerce o una configuración de WordPress sin cabeza, la jerarquía gobierna qué PHP se ejecuta en cada carga de página.
Qué es realmente la Jerarquía de Plantillas
En esencia, la Jerarquía de Plantillas es una cadena de búsqueda integrada en el núcleo de WordPress (wp-includes/class-wp-query.php y wp-includes/template.php). Cuando WordPress termina de analizar la solicitud y de poblar el objeto global $wp_query, llama internamente a los equivalentes de get_template_part() para resolver la plantilla correcta. La resolución no es aleatoria — es una lista estricta y ordenada de nombres de archivo verificados contra el directorio raíz de su tema.
La clave arquitectónica que la mayoría de los tutoriales omiten: WordPress no escanea el directorio de su tema. Construye un array priorizado de nombres de archivo candidatos basado en variables de consulta, luego verifica cada archivo usando locate_template(). Esta distinción importa cuando está depurando plantillas faltantes o construyendo generadores de temas programáticos.
La cadena de respaldo siempre termina en index.php. Este archivo es el único archivo de plantilla que WordPress requiere que cada tema incluya, según los estándares de desarrollo de temas.
Archivos de Plantilla Principales que Todo Tema Debe Entender
| Archivo de Plantilla | Se activa cuando | Recurre a |
|---|---|---|
front-page.php | La página de inicio estática está configurada en Ajustes > Lectura | home.php |
home.php | Página de índice de entradas del blog | index.php |
single-{post-type}.php | Entrada única de un tipo de publicación personalizado específico | single.php |
single.php | Cualquier entrada única (tipo de publicación predeterminado) | singular.php |
singular.php | Cualquier entrada o página única (comodín genérico) | index.php |
page-{slug}.php | Una página específica por slug | page-{ID}.php |
page-{ID}.php | Una página específica por ID de base de datos | page.php |
page.php | Cualquier página estática | singular.php |
category-{slug}.php | Archivo de categoría por slug | category-{ID}.php |
category-{ID}.php | Archivo de categoría por ID de término | category.php |
category.php | Cualquier archivo de categoría | archive.php |
tag-{slug}.php | Archivo de etiqueta por slug | tag-{ID}.php |
tag.php | Cualquier archivo de etiqueta | archive.php |
taxonomy-{tax}-{term}.php | Taxonomía personalizada, término específico | taxonomy-{tax}.php |
taxonomy-{tax}.php | Taxonomía personalizada, cualquier término | taxonomy.php |
taxonomy.php | Cualquier archivo de taxonomía personalizada | archive.php |
author-{nicename}.php | Archivo de autor por nombre de usuario | author-{ID}.php |
author-{ID}.php | Archivo de autor por ID de usuario | author.php |
author.php | Cualquier archivo de autor | archive.php |
archive-{post-type}.php | Archivo de tipo de publicación personalizado | archive.php |
archive.php | Cualquier archivo (fecha, autor, taxonomía) | index.php |
date.php | Archivo basado en fecha | archive.php |
search.php | Página de resultados de búsqueda | index.php |
404.php | No se encontró contenido coincidente | index.php |
attachment.php | Página de adjunto único | single.php |
embed.php | Marco oEmbed para una publicación | index.php |
index.php | Respaldo universal | — |
Observe la entrada singular.php — esta es una plantilla que muchos desarrolladores pasan por alto por completo. Introducida en WordPress 4.3, se sitúa entre single.php/page.php y index.php en la jerarquía, actuando como un comodín unificado para cualquier vista de contenido singular. Si su tema incluye singular.php, capturará los casos en que ni single.php ni page.php existan.
El Orden Completo de Resolución de Plantillas por Tipo de Página
Entradas de Blog Individuales
Cuando un visitante solicita una publicación estándar (post_type = 'post'), WordPress verifica en este orden exacto:
single.phpsingular.phpindex.php
single-post-{slug}.php (WordPress 4.4+, p. ej., single-post-hello-world.php)
single-post.phpLa variante basada en slug del paso 1 rara vez está documentada pero es extremadamente útil para dar a una sola publicación insignia un diseño completamente único sin tocar ninguna otra plantilla.
Tipos de Publicaciones Personalizadas
Para un tipo de publicación personalizado registrado como portfolio:
single-portfolio-{slug}.phpsingle-portfolio.phpsingle.phpsingular.phpindex.php
Para su archivo (requiere 'has_archive' => true en register_post_type()):
archive-portfolio.phparchive.phpindex.php
Un error común: registrar un tipo de publicación personalizado con 'has_archive' => false (el predeterminado) y luego preguntarse por qué archive-portfolio.php nunca se carga. La URL del archivo simplemente devuelve un error 404 en ese caso.
Páginas Estáticas
- Archivo de plantilla configurado mediante el metabox de Atributos de Página (plantilla de página personalizada)
page-{slug}.phppage-{ID}.phppage.phpsingular.phpindex.php
Las plantillas de página personalizadas son archivos PHP en el directorio de su tema que incluyen un comentario de encabezado de archivo:
<?php
/**
* Template Name: Full Width Layout
* Template Post Type: page
*/La declaración Template Post Type (WordPress 4.7+) restringe qué tipos de publicaciones pueden usar esta plantilla desde el editor. Sin ella, la plantilla aparece en el menú desplegable de Atributos de Página solo para páginas.
Archivos de Categoría
category-{slug}.phpcategory-{ID}.phpcategory.phparchive.phpindex.php
Archivos de Taxonomía Personalizada
Para una taxonomía registrada como genre con un slug de término thriller:
taxonomy-genre-thriller.phptaxonomy-genre.phptaxonomy.phparchive.phpindex.php
Archivos de Autor
author-{user_nicename}.phpauthor-{user_ID}.phpauthor.phparchive.phpindex.php
La Página de Inicio (Caso Límite Crítico)
Esta es la parte más incomprendida de la jerarquía. WordPress distingue entre dos escenarios de página de inicio:
Escenario A — Índice de entradas del blog como página de inicio (Ajustes > Lectura: "Las últimas entradas"):
front-page.phphome.phpindex.php
Escenario B — Página estática como página de inicio (Ajustes > Lectura: "Una página estática"):
front-page.php
page.php (si no existe front-page.php)
index.phpEl matiz crítico: front-page.php tiene precedencia en ambos escenarios. Si front-page.php existe en su tema, siempre renderiza la página de inicio independientemente de los ajustes de Lectura. Esto sorprende a muchos desarrolladores que crean front-page.php para una página de inicio estática pero olvidan que también anulará el índice del blog si luego cambian la configuración.
Resultados de Búsqueda y Error 404
Resultados de búsqueda:
search.phpindex.php
Páginas de error 404:
404.phpindex.php
Una página 404.php bien elaborada es un activo de conversión, no algo secundario. Debe incluir un formulario de búsqueda, enlaces a contenido popular y navegación clara — todo lo cual requiere comprender el sistema de plantillas para implementarlo correctamente.
Cómo WordPress Resuelve las Plantillas Internamente
Comprender la mecánica interna ayuda al depurar o ampliar el sistema. El proceso de resolución en wp-includes/template.php funciona de la siguiente manera:
// Simplified representation of WordPress template resolution
function get_query_template( $type, $templates = array() ) {
$type = preg_replace( '|[^a-z0-9-]+|', '', $type );
if ( empty( $templates ) ) {
$templates = array( "{$type}.php" );
}
// Fires before template resolution — allows plugins/themes to modify the list
$templates = apply_filters( "_{$type}_template_hierarchy", $templates );
$template = locate_template( $templates );
// Fires after template is located — allows final override
$template = apply_filters( "{$type}_template", $template, $type, $templates );
return $template;
}Dos hooks de filtro son críticos aquí:
_{$type}_template_hierarchy — se activa antes de la búsqueda del archivo, permitiéndole inyectar candidatos adicionales en el array
{$type}_template — se activa después de que se localiza el archivo, permitiéndole intercambiar la ruta de plantilla resuelta por completo
Estos hooks son la forma en que los plugins de constructores de páginas, las redes multisitio y WooCommerce anulan plantillas sin tocar los archivos del tema.
Anulación Programática de la Jerarquía de Plantillas
Inyección de una Ruta de Plantilla Personalizada
add_filter( 'single_template_hierarchy', function( $templates ) {
// Prepend a plugin-directory template before theme templates are checked
if ( is_singular( 'portfolio' ) ) {
array_unshift( $templates, plugin_dir_path( __FILE__ ) . 'templates/single-portfolio.php' );
}
return $templates;
} );
Anulación de una Plantilla Después de la Resolución
add_filter( 'template_include', function( $template ) {
if ( is_singular( 'portfolio' ) && current_user_can( 'edit_posts' ) ) {
// Load a debug template for editors
$debug_template = get_stylesheet_directory() . '/debug/single-portfolio-debug.php';
if ( file_exists( $debug_template ) ) {
return $debug_template;
}
}
return $template;
} );
El filtro template_include es el último hook antes de que WordPress cargue el archivo de plantilla. Recibe la ruta completamente resuelta y debe devolver una ruta de archivo válida.
Partes de Plantilla y la Función get_template_part()
Las partes de plantilla son fragmentos PHP reutilizables cargados mediante get_template_part(). Siguen su propia mini-jerarquía:
// Loads content-video.php if it exists, falls back to content.php
get_template_part( 'template-parts/content', 'video' );
WordPress 5.5 añadió un tercer parámetro para pasar datos a las partes de plantilla:
get_template_part( 'template-parts/card', 'product', array(
'post_id' => get_the_ID(),
'show_price' => true,
) );
Dentro de la parte de plantilla, recupere estos datos con:
$args = wp_parse_args( $args, array(
'post_id' => 0,
'show_price' => false,
) );
Esto elimina la necesidad de usar variables globales para pasar datos entre plantillas — una mejora significativa para la mantenibilidad y la capacidad de prueba.
Temas Hijo y el Sistema de Anulación de Plantillas
Los temas hijo extienden la jerarquía anteponiendo el directorio del tema hijo a la ruta de búsqueda de plantillas. Cuando se ejecuta locate_template(), verifica:
Directorio del tema hijo (get_stylesheet_directory())
Directorio del tema padre (get_template_directory())
Esto significa que puede anular cualquier plantilla del tema padre creando un archivo con el nombre idéntico en su tema hijo. No necesita copiar el archivo completo — solo las partes que desea cambiar — pero WordPress carga el archivo como una unidad completa, por lo que debe incluir todo el marcado requerido.
Error común en temas hijo: Copiar functions.php del tema padre al tema hijo y esperar que reemplace las funciones del padre. A diferencia de otros archivos de plantilla, functions.php en un tema hijo se carga además del functions.php del padre, no en su lugar. Ambos archivos se ejecutan.
Para crear una estructura mínima de tema hijo:
my-child-theme/
├── style.css (required — contains theme header comment)
├── functions.php (optional — enqueue parent styles here)
└── single-post.php (overrides parent's single-post.php)
El encabezado style.css debe declarar el padre:
/*
Theme Name: My Child Theme
Template: parent-theme-directory-name
*/
Depuración de la Plantilla Activa
Método 1: Plugin Query Monitor
El plugin Query Monitor (gratuito, WordPress.org) muestra el archivo de plantilla resuelto y la jerarquía completa de candidatos en su panel de la barra de herramientas de administración. Esta es la herramienta de depuración más confiable disponible y añade una sobrecarga insignificante.
Método 2: El Hook template_include
add_filter( 'template_include', function( $template ) {
if ( current_user_can( 'manage_options' ) ) {
echo '<!-- Template: ' . esc_html( str_replace( ABSPATH, '', $template ) ) . ' -->';
}
return $template;
} );
Esto muestra la ruta de la plantilla como un comentario HTML visible solo para los administradores. Elimínelo antes de implementar en producción.
Método 3: WP_DEBUG y Registro
En un servidor de desarrollo, habilite el registro de depuración en wp-config.php:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
Luego añada registro temporal dentro de template_include:
add_filter( 'template_include', function( $template ) {
error_log( 'Resolved template: ' . $template );
return $template;
} );
En un entorno de Hosting VPS con acceso root, puede monitorear el registro de depuración en tiempo real:
tail -f /var/www/html/wp-content/debug.log
Este enfoque es mucho más confiable que depender de herramientas de depuración basadas en el navegador al solucionar problemas de resolución de plantillas en un servidor en producción o de pruebas.
WooCommerce y el Sistema de Anulación de Plantillas
WooCommerce incluye su propia jerarquía de plantillas que se sitúa sobre el sistema nativo de WordPress. Las plantillas de WooCommerce se encuentran en wp-content/plugins/woocommerce/templates/ y se cargan mediante su propia función wc_get_template(), que busca anulaciones en:
wp-content/themes/your-theme/woocommerce/wp-content/themes/your-child-theme/woocommerce/Para anular la plantilla de producto único de WooCommerce, copie woocommerce/templates/single-product.php a your-theme/woocommerce/single-product.php. Nunca edite los archivos de plantilla del plugin directamente — se sobrescriben en cada actualización del plugin.
WooCommerce también se conecta a los hooks de acción woocommerce_template_single_*, lo que le brinda control granular sobre secciones individuales (precio, pestañas, botón de añadir al carrito) sin anular archivos de plantilla completos. Este es el enfoque preferido para modificaciones menores.
Temas de Bloques y la Jerarquía de Plantillas en la Edición Completa del Sitio
WordPress 5.9 introdujo la Edición Completa del Sitio (FSE) con temas de bloques, lo que cambia cómo funciona la jerarquía de plantillas en la práctica. Los temas de bloques almacenan plantillas como archivos HTML en un directorio templates/ en lugar de archivos PHP:
my-block-theme/
├── templates/
│ ├── index.html
│ ├── single.html
│ ├── page.html
│ ├── archive.html
│ └── 404.html
├── parts/
│ ├── header.html
│ └── footer.html
└── theme.jsonLa lógica de resolución sigue las mismas reglas de jerarquía, pero WordPress ahora también verifica en la base de datos las plantillas personalizadas por el usuario guardadas mediante el Editor del Sitio. El orden de búsqueda se convierte en:
- Plantilla guardada por el usuario en la base de datos (tipo de publicación
wp_template) - Archivo HTML del directorio
templates/del tema - Archivo HTML del directorio
templates/del tema padre - Plantillas de respaldo incluidas en WordPress
Los temas PHP clásicos y los temas de bloques pueden coexistir en una instalación de WordPress, pero no puede mezclar plantillas PHP y plantillas de bloques HTML dentro de un solo tema. Si su tema tiene un directorio templates/ y un theme.json válido, WordPress lo trata como un tema de bloques.
Para equipos que ejecutan cargas de trabajo críticas en rendimiento en Servidores Dedicados, comprender esta distinción es esencial al evaluar frameworks de temas — los temas de bloques transfieren el renderizado de plantillas al analizador de bloques, que tiene características de almacenamiento en caché diferentes a la ejecución de plantillas PHP.
Implicaciones de Rendimiento de la Jerarquía de Plantillas
Cada resolución de plantilla implica verificaciones del sistema de archivos mediante locate_template(). En un sitio de alto tráfico, esto puede añadir una sobrecarga medible si no se almacena en caché. Optimizaciones clave:
Caché de objetos: Use una caché de objetos persistente (Redis o Memcached) para almacenar en caché los resultados de WP_Query y reducir el número de consultas a la base de datos que alimentan la selección de plantillas.
OPcache: Asegúrese de que PHP OPcache esté habilitado y correctamente configurado. Dado que las plantillas son archivos PHP, OPcache las compila a bytecode en la primera carga y sirve las solicitudes posteriores desde la memoria. En un VPS con cPanel correctamente configurado, OPcache generalmente está habilitado de forma predeterminada, pero puede requerir ajuste de opcache.memory_consumption y opcache.max_accelerated_files para temas grandes con muchos archivos de plantilla.
Evite archivos de plantilla innecesarios: Cada archivo de plantilla en el directorio de su tema es un candidato que locate_template() debe verificar. Los temas con cientos de archivos de plantilla (común en temas comerciales sobrecargados) aumentan la E/S del sistema de archivos en cada solicitud sin caché. Audite su tema y elimine las plantillas no utilizadas.
Caché de página completa: Herramientas como WP Rocket, W3 Total Cache o el almacenamiento en caché a nivel de servidor (caché FastCGI de Nginx, Varnish) omiten por completo la ejecución de plantillas PHP para usuarios anónimos. La resolución de la jerarquía de plantillas solo se ejecuta cuando falla la caché.
Patrones Prácticos de Personalización
Patrón 1: Diseño Específico por Categoría Sin un Plugin
Cree category-news.php en el directorio de su tema. WordPress lo usa automáticamente para el archivo de la categoría “noticias”. Sin plugin, sin hook de filtro — solo un archivo con el nombre correcto.
<?php
/**
* Template for the "news" category archive.
* Inherits from: category.php → archive.php → index.php
*/
get_header();
?>
<main class="news-archive">
<h1><?php single_cat_title(); ?></h1>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<?php get_template_part( 'template-parts/card', 'news' ); ?>
<?php endwhile; endif; ?>
<?php the_posts_pagination(); ?>
</main>
<?php get_footer(); ?>Patrón 2: Diseño por Autor para Colaboradores Destacados
// author-jane-smith.php — loads only for the author with nicename "jane-smith"
get_header();
?>
<div class="featured-author-layout">
<?php get_template_part( 'template-parts/author', 'featured' ); ?>
<!-- Custom bio section, social links, etc. -->
</div>
<?php get_footer(); ?>Patrón 3: Lógica Condicional Dentro de index.php
Si está construyendo un tema mínimo y desea evitar múltiples archivos de plantilla, puede usar etiquetas condicionales dentro de index.php:
<?php get_header(); ?>
<?php if ( is_front_page() && is_home() ) : ?>
<?php get_template_part( 'template-parts/home', 'blog-index' ); ?>
<?php elseif ( is_front_page() ) : ?>
<?php get_template_part( 'template-parts/home', 'static' ); ?>
<?php elseif ( is_single() ) : ?>
<?php get_template_part( 'template-parts/content', get_post_type() ); ?>
<?php elseif ( is_archive() ) : ?>
<?php get_template_part( 'template-parts/archive', 'default' ); ?>
<?php else : ?>
<?php get_template_part( 'template-parts/content', 'none' ); ?>
<?php endif; ?>
<?php get_footer(); ?>Este patrón es utilizado por temas como Twenty Twenty-One y es perfectamente válido. La desventaja es que un único index.php grande se vuelve más difícil de mantener a medida que crece la complejidad.
Multisitio y Jerarquía de Plantillas
En una red WordPress Multisitio, cada sitio de la red puede usar un tema activo diferente. La jerarquía de plantillas opera de manera idéntica por sitio, pero los plugins activados en la red pueden usar los filtros template_include o _{$type}_template_hierarchy para inyectar plantillas compartidas en todos los sitios sin duplicar archivos de tema.
Un patrón común en multisitio es un directorio de “plantillas de red” fuera de la raíz web al que se hace referencia mediante hooks de filtro a nivel de plugin. Esto permite a un equipo de diseño central enviar actualizaciones de plantillas a todos los sitios simultáneamente — una ventaja operativa significativa para agencias que gestionan docenas de sitios de clientes en un único entorno de Hosting Web Compartido o VPS.
SSL, Seguridad y Permisos de Archivos de Plantilla
Los archivos de plantilla son PHP y deben tratarse como código ejecutable. Los permisos de archivo incorrectos son un vector de ataque común. En un servidor Linux, los archivos de plantilla del tema deben ser propiedad del usuario del servidor web (normalmente www-data o nginx) y configurados con el modo 644:
find /var/www/html/wp-content/themes/your-theme -type f -name "*.php" -exec chmod 644 {} ;
find /var/www/html/wp-content/themes/your-theme -type d -exec chmod 755 {} ;Nunca configure archivos PHP con 777. Si un archivo de plantilla requiere acceso de escritura (inusual y generalmente desaconsejable), use 664 con la propiedad de grupo adecuada en su lugar.
Combinar su instalación de WordPress con un Certificado SSL válido garantiza que el contenido renderizado por plantillas — incluidas las páginas generadas dinámicamente con datos sensibles del usuario — siempre se transmita a través de HTTPS. Esto es innegociable para cualquier sitio que use formularios de contacto, cuentas de usuario o comercio electrónico.
Referencia de Jerarquía de Plantillas: Flujo Visual
Request URL
|
v
WordPress Query Resolution (WP_Query)
|
+-- Is it the front page?
| front-page.php → home.php → index.php
|
+-- Is it a single post?
| single-{type}-{slug}.php → single-{type}.php → single.php → singular.php → index.php
|
+-- Is it a static page?
| [custom template] → page-{slug}.php → page-{ID}.php → page.php → singular.php → index.php
|
+-- Is it a category archive?
| category-{slug}.php → category-{ID}.php → category.php → archive.php → index.php
|
+-- Is it a custom taxonomy?
| taxonomy-{tax}-{term}.php → taxonomy-{tax}.php → taxonomy.php → archive.php → index.php
|
+-- Is it an author archive?
| author-{nicename}.php → author-{ID}.php → author.php → archive.php → index.php
|
+-- Is it a date archive?
| date.php → archive.php → index.php
|
+-- Is it search results?
| search.php → index.php
|
+-- Is it a 404?
404.php → index.phpMatriz de Decisión: Cuándo Usar Cada Enfoque de Personalización
| Escenario | Enfoque Recomendado | Evitar |
|---|---|---|
| Anular una categoría específica | Crear category-{slug}.php en el tema | Modificar archive.php directamente |
| Anular una página específica | Crear page-{slug}.php o usar encabezado de plantilla personalizada | Editar page.php |
| Modificar plantilla de WooCommerce | Copiar al directorio theme/woocommerce/ | Editar archivos del plugin |
| Modificar plantilla del tema padre | Crear archivo idéntico en el tema hijo | Editar archivos del tema padre |
| Aplicar lógica a múltiples tipos de página | Usar etiquetas condicionales en una plantilla compartida | Duplicar código entre plantillas |
| Inyectar plantillas desde un plugin | Usar el filtro _{$type}_template_hierarchy | Codificar rutas en archivos del tema |
| Anular cualquier plantilla como último recurso | Usar el filtro template_include | Usar exit() o die() en plantillas |
| Personalización de tema de bloques | Usar el Editor del Sitio o archivos HTML de templates/ | Mezclar plantillas PHP y HTML de bloques |
Conclusiones Técnicas Clave
index.phpes obligatorio. Todo tema debe incluirlo. Es el respaldo universal que termina cada cadena de resolución.singular.phpes la capa intermedia infrautilizada. Captura cualquier entrada o página singular cuando nisingle.phpnipage.phpexisten. Úselo en temas mínimos para reducir el número de archivos.front-page.phpanula todo para la página de inicio, independientemente de los ajustes de Lectura. Si existe, siempre se carga.- Los nombres de archivo distinguen entre mayúsculas y minúsculas en servidores Linux.
Category-News.phpno coincidirá cuando WordPress busquecategory-news.php. Este es un fallo silencioso que es difícil de depurar sin Query Monitor. - El filtro
template_includees la anulación maestra. Se activa después de que se completa toda la resolución de jerarquía y le brinda una oportunidad final para intercambiar cualquier plantilla por cualquier motivo. - Los temas de bloques almacenan plantillas como HTML, no PHP. La lógica de jerarquía es idéntica, pero el formato de archivo y la estructura de directorios difieren fundamentalmente de los temas clásicos.
- El
functions.phpdel tema hijo se carga además del del padre, no en su lugar. Todos los demás archivos de plantilla siguen el patrón de anulación estándar. - El ajuste de OPcache importa a escala. En sitios de alto tráfico, asegúrese de que
opcache.max_accelerated_filessupere el número total de archivos PHP en su instalación de WordPress, incluidas todas las plantillas del tema. - Las plantillas de WooCommerce están fuera de la jerarquía de WordPress. Requieren un flujo de trabajo de anulación separado mediante el subdirectorio
woocommerce/en su tema. - Combine su trabajo de personalización de plantillas con un dominio correctamente configurado y Registro de Dominio para garantizar la coherencia de URL canónica en todas las páginas renderizadas por plantillas.
Preguntas Frecuentes
¿Qué sucede si WordPress no puede encontrar ningún archivo de plantilla en la jerarquía?
WordPress siempre encuentra index.php porque es obligatorio para todo tema válido. Si index.php falta, WordPress genera un error fatal y muestra una página en blanco o un error del servidor. Este es el único archivo de plantilla cuya ausencia rompe el sitio por completo.
¿Puedo usar la jerarquía de plantillas en un plugin sin modificar el tema activo?
Sí. Use el filtro _{$type}_template_hierarchy para anteponer una ruta del directorio del plugin al array de candidatos antes de que se ejecute locate_template(), o use template_include para intercambiar la ruta de plantilla resuelta después de la resolución. Así es como WooCommerce, bbPress y la mayoría de los plugins importantes inyectan sus propias plantillas sin requerir modificaciones del tema.
¿Por qué front-page.php anula mi índice del blog incluso cuando configuro “Las últimas entradas” en los ajustes de Lectura?
Porque front-page.php tiene precedencia incondicional para la página de inicio en todas las configuraciones de Lectura. Si desea que el índice del blog use home.php en su lugar, cambie el nombre o elimine front-page.php de su tema. Dentro de front-page.php, use is_home() para detectar si la página de inicio también es el índice del blog y renderizar en consecuencia.
¿Cómo puedo saber qué archivo de plantilla está usando WordPress actualmente para una página específica?
Instale el plugin Query Monitor. Muestra la ruta de plantilla resuelta y la jerarquía completa de candidatos en la barra de herramientas de administración en cada carga de página. Alternativamente, añada un filtro temporal template_include que muestre la ruta como un comentario HTML visible solo para los administradores.
¿La jerarquía de plantillas funciona de la misma manera en WordPress Multisitio?
La lógica de resolución por sitio es idéntica. Cada sitio resuelve las plantillas contra su propio tema activo. La diferencia está a nivel de red: los plugins activados en la red pueden usar hooks de filtro para inyectar plantillas compartidas en todos los sitios, y la función get_stylesheet_directory() devuelve la ruta correcta para el tema activo de cada sitio individual, no una ruta de red compartida.
