15%

Ahorra 15%<\/span> en todos los servicios de hosting

Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

Usa el código:

Skills
Comenzar
22.10.2024

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 PlantillaSe activa cuandoRecurre a
front-page.phpLa página de inicio estática está configurada en Ajustes > Lecturahome.php
home.phpPágina de índice de entradas del blogindex.php
single-{post-type}.phpEntrada única de un tipo de publicación personalizado específicosingle.php
single.phpCualquier entrada única (tipo de publicación predeterminado)singular.php
singular.phpCualquier entrada o página única (comodín genérico)index.php
page-{slug}.phpUna página específica por slugpage-{ID}.php
page-{ID}.phpUna página específica por ID de base de datospage.php
page.phpCualquier página estáticasingular.php
category-{slug}.phpArchivo de categoría por slugcategory-{ID}.php
category-{ID}.phpArchivo de categoría por ID de términocategory.php
category.phpCualquier archivo de categoríaarchive.php
tag-{slug}.phpArchivo de etiqueta por slugtag-{ID}.php
tag.phpCualquier archivo de etiquetaarchive.php
taxonomy-{tax}-{term}.phpTaxonomía personalizada, término específicotaxonomy-{tax}.php
taxonomy-{tax}.phpTaxonomía personalizada, cualquier términotaxonomy.php
taxonomy.phpCualquier archivo de taxonomía personalizadaarchive.php
author-{nicename}.phpArchivo de autor por nombre de usuarioauthor-{ID}.php
author-{ID}.phpArchivo de autor por ID de usuarioauthor.php
author.phpCualquier archivo de autorarchive.php
archive-{post-type}.phpArchivo de tipo de publicación personalizadoarchive.php
archive.phpCualquier archivo (fecha, autor, taxonomía)index.php
date.phpArchivo basado en fechaarchive.php
search.phpPágina de resultados de búsquedaindex.php
404.phpNo se encontró contenido coincidenteindex.php
attachment.phpPágina de adjunto únicosingle.php
embed.phpMarco oEmbed para una publicaciónindex.php
index.phpRespaldo 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-post-{slug}.php (WordPress 4.4+, p. ej., single-post-hello-world.php)
    single-post.php
  1. single.php
  2. singular.php
  3. index.php

La 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:

  1. single-portfolio-{slug}.php
  2. single-portfolio.php
  3. single.php
  4. singular.php
  5. index.php

Para su archivo (requiere 'has_archive' => true en register_post_type()):

  1. archive-portfolio.php
  2. archive.php
  3. index.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

  1. Archivo de plantilla configurado mediante el metabox de Atributos de Página (plantilla de página personalizada)
  2. page-{slug}.php
  3. page-{ID}.php
  4. page.php
  5. singular.php
  6. index.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

  1. category-{slug}.php
  2. category-{ID}.php
  3. category.php
  4. archive.php
  5. index.php

Archivos de Taxonomía Personalizada

Para una taxonomía registrada como genre con un slug de término thriller:

  1. taxonomy-genre-thriller.php
  2. taxonomy-genre.php
  3. taxonomy.php
  4. archive.php
  5. index.php

Archivos de Autor

  1. author-{user_nicename}.php
  2. author-{user_ID}.php
  3. author.php
  4. archive.php
  5. index.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"):

  1. front-page.php
  2. home.php
  3. index.php

Escenario B — Página estática como página de inicio (Ajustes > Lectura: "Una página estática"):

  1. front-page.php
  2. page.php (si no existe front-page.php)
    index.php

El 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:

  1. search.php
  2. index.php

Páginas de error 404:

  1. 404.php
  2. index.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/
  • Directorio de plantillas propio del plugin
  • 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.json

    La 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:

    1. Plantilla guardada por el usuario en la base de datos (tipo de publicación wp_template)
    2. Archivo HTML del directorio templates/ del tema
    3. Archivo HTML del directorio templates/ del tema padre
    4. 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.php

    Matriz de Decisión: Cuándo Usar Cada Enfoque de Personalización

    EscenarioEnfoque RecomendadoEvitar
    Anular una categoría específicaCrear category-{slug}.php en el temaModificar archive.php directamente
    Anular una página específicaCrear page-{slug}.php o usar encabezado de plantilla personalizadaEditar page.php
    Modificar plantilla de WooCommerceCopiar al directorio theme/woocommerce/Editar archivos del plugin
    Modificar plantilla del tema padreCrear archivo idéntico en el tema hijoEditar archivos del tema padre
    Aplicar lógica a múltiples tipos de páginaUsar etiquetas condicionales en una plantilla compartidaDuplicar código entre plantillas
    Inyectar plantillas desde un pluginUsar el filtro _{$type}_template_hierarchyCodificar rutas en archivos del tema
    Anular cualquier plantilla como último recursoUsar el filtro template_includeUsar exit() o die() en plantillas
    Personalización de tema de bloquesUsar el Editor del Sitio o archivos HTML de templates/Mezclar plantillas PHP y HTML de bloques

    Conclusiones Técnicas Clave

    • index.php es obligatorio. Todo tema debe incluirlo. Es el respaldo universal que termina cada cadena de resolución.
    • singular.php es la capa intermedia infrautilizada. Captura cualquier entrada o página singular cuando ni single.php ni page.php existen. Úselo en temas mínimos para reducir el número de archivos.
    • front-page.php anula 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.php no coincidirá cuando WordPress busque category-news.php. Este es un fallo silencioso que es difícil de depurar sin Query Monitor.
    • El filtro template_include es 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.php del 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_files supere 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.

    15%

    Ahorra 15%<\/span> en todos los servicios de hosting

    Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

    Usa el código:

    Skills
    Comenzar