Apoya mi contenido: 

Tabla de contenido

Creación de temas WordPress desde cero: estructura, templates y hooks

Construir un tema de WordPress desde cero te da control total sobre el diseño, el rendimiento y la arquitectura de tu sitio. En esta guía verás la estructura mínima, la jerarquía de plantillas, cómo registrar assets y los hooks esenciales (actions & filters) para extender funcionalidades.

Estructura mínima de un tema

mi-tema/
├─ style.css
├─ functions.php
├─ index.php
├─ screenshot.png
└─ /templates (opcional)

Encabezado obligatorio en style.css

/*
 Theme Name: Mi Tema
 Theme URI: https://ejemplo.com
 Author: Tu Nombre
 Description: Tema base desde cero.
 Version: 1.0.0
 Text Domain: mi-tema
*/

Archivo functions.php: inicialización del tema

<?php
// Soportes del tema (miniaturas, título, HTML5, etc.)
add_action('after_setup_theme', function () {
  add_theme_support('title-tag');
  add_theme_support('post-thumbnails');
  add_theme_support('html5', ['search-form','comment-form','gallery','caption']);
  register_nav_menus([
    'primary' => __('Menú principal', 'mi-tema'),
  ]);
});

// Registrar y encolar estilos/scripts
add_action('wp_enqueue_scripts', function () {
  wp_enqueue_style('mi-tema', get_stylesheet_uri(), [], '1.0.0');
  wp_enqueue_script('mi-tema', get_template_directory_uri() . '/assets/app.js', [], '1.0.0', true);
});

Plantillas base y jerarquía

La jerarquía de plantillas define qué archivo usa WordPress según el tipo de contenido:

  • front-page.php → Portada estática.
  • home.php → Blog/entradas.
  • single.php / single-{post_type}.php → Entrada o CPT.
  • page.php → Páginas.
  • archive.php, category.php, tag.php → Archivos.
  • search.php, 404.php → Búsqueda y errores.
  • index.php → Fallback obligatorio.

Estructura típica de layout

Divide la salida en header.php, footer.php y sidebar.php para reutilizar.

<!-- index.php -->
<?php get_header(); ?>

<main id="content">
  <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    <article>
      <h1><?php the_title(); ?></h1>
      <div><?php the_content(); ?></div>
    </article>
  <?php endwhile; else : ?>
    <p>No hay contenido.</p>
  <?php endif; ?>
</main>

<?php get_footer(); ?>

Template Parts y funciones útiles

  • get_template_part('parts/card', 'post') para fragmentos reutilizables.
  • wp_nav_menu(['theme_location' => 'primary']) para menús.
  • the_post_thumbnail('large') para imágenes destacadas.

Hooks: actions y filters esenciales

Los hooks permiten ejecutar lógica en puntos concretos del ciclo de WordPress.

Actions (ejecutar código)

<?php
// Agrega una clase al <body> según condición
add_filter('body_class', function($classes){
  if (is_single()) $classes[] = 'is-single';
  return $classes;
});

Filters (alterar valores)

<?php
// Cambiar el "read more" del extracto
add_filter('excerpt_more', fn() => ' …');
add_filter('excerpt_length', fn($l) => 24);

Custom Post Types (CPT) y taxonomías

<?php
add_action('init', function () {
  register_post_type('proyecto', [
    'label' => 'Proyectos',
    'public' => true,
    'menu_icon' => 'dashicons-portfolio',
    'supports' => ['title','editor','thumbnail','excerpt'],
    'has_archive' => true,
    'rewrite' => ['slug' => 'proyectos'],
  ]);
});

Temas de bloques y theme.json (moderno)

Desde WordPress 5.9+ puedes definir estilos globales y soportes con theme.json.

{
  "version": 2,
  "settings": {
    "color": { "palette": [{ "slug":"brand","color":"#4f46e5","name":"Brand" }] },
    "typography": { "fontFamilies": [{ "slug":"inter","fontFamily":"Inter, system-ui" }] }
  },
  "styles": {
    "color": { "text": "#111827", "background": "#ffffff" },
    "typography": { "fontSize": "16px", "lineHeight": "1.6" }
  }
}

Buenas prácticas

  • Seguridad y rendimiento: escapa/sanea datos (esc_html, wp_kses), usa wp_enqueue_*, evita consultas pesadas.
  • I18n: prepara traducciones con __() y _e() + Text Domain.
  • Accesibilidad: usa etiquetas semánticas, roles ARIA y contraste adecuado.
  • Compatibilidad: prueba con Gutenberg y widgets, define add_theme_support según lo necesario.
  • Child theme: cuando edites un tema de terceros, crea un child para mantener actualizaciones seguras.

Checklist rápido

  • style.css con encabezado y estilos base.
  • functions.php con soportes, menús y assets encolados.
  • ✓ Plantillas clave: index.php, single.php, page.php, archive.php, 404.php.
  • ✓ Partes de plantilla reutilizables y lazos del Loop bien estructurados.
  • ✓ Hooks para personalizar y theme.json si usas bloques.

Conclusión

Crear un tema de WordPress desde cero te permite construir sitios rápidos, accesibles y escalables. Domina la jerarquía de plantillas, aprovecha los hooks y organiza un código limpio para desarrollar con calidad profesional.

👉 ¿Quieres que diseñemos y desarrollemos tu tema WordPress a medida (rápido y SEO-friendly)?
Contáctanos aquí.

¡Comunícate con nosotros!