Cómo crear un tema de WordPress desde cero con Underscores

Contents

Introducción

Crear un tema de WordPress desde cero puede resultar intimidante, pero Underscores (https://underscores.me) simplifica en gran medida el proceso. Underscores es un starter theme minimalista desarrollado por Automattic, diseñado para servir como punto de partida profesional, libre de estilos llamativos y con las mejores prácticas de WordPress implementadas.

En este extenso artículo repasaremos paso a paso cómo:

  • Preparar el entorno de desarrollo.
  • Generar tu tema con Underscores.
  • Estructurar archivos y carpetas.
  • Configurar funciones esenciales (functions.php).
  • Crear plantillas básicas: header, footer, sidebar, index, single, archive, page, search y 404.
  • Agregar estilos CSS personalizados y responsivos.
  • Incorporar menús, barras laterales, áreas de widgets y soporte para imágenes destacadas.
  • Integrar el Customizer API y habilitar la traducción.
  • Encolar scripts y despliegue final.

1. Prerrequisitos

  • Instalación local de PHP (v7.4 recomendado).
  • Servidor web local (Apache, Nginx o Local by Flywheel).
  • MySQL o MariaDB.
  • WordPress instalado (wordpress.org/download).
  • Editor de código (VS Code, PHPStorm, Sublime Text, etc.).
  • Conocimientos básicos de PHP, CSS y la jerarquía de temas de WordPress.

2. Generación del tema con Underscores

Visita https://underscores.me y completa el formulario:

Campo Descripción
Nombre del Tema El nombre público de tu tema.
Slug Identificador único (sin espacios).
Descripción Breve resumen del propósito.
Autor Tu nombre o el de tu agencia.
URI del Autor Página web de referencia.

Una vez enviado, Underscores genera un archivo ZIP con la estructura básica. Descomprímelo en /wp-content/themes/tu-tema-slug/.

3. Estructura de carpetas y archivos

La instalación de Underscores incluye:

  • style.css: hoja de estilos principal y cabecera del tema.
  • functions.php: registro de menús, soporte de funciones y encolado de estilos/scripts.
  • index.php: plantilla genérica de bucle.
  • header.php, footer.php, sidebar.php.
  • page.php, single.php, archive.php, search.php, 404.php.
  • template-parts/: fragmentos reutilizables (loop, content, entry-meta).
  • screenshot.png: captura previa del tema.

3.1 Personalización de la cabecera de style.css

Abre style.css y modifica los comentarios iniciales:

/
Theme Name: Mi Tema Personalizado
Theme URI: https://ejemplo.com/mi-tema
Author: Tu Nombre
Author URI: https://tusitio.com
Description: Tema basado en Underscores, adaptable y ligero.
Version: 1.0.0
License: GNU General Public License v2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: mi-tema
Tags: responsive, blog, custom-header
/

4. Configuración de functions.php

functions.php es la columna vertebral de tu tema. Aquí registrarás menús, cargarás scripts y habilitarás funcionalidades.

4.1 Registro de menús de navegación

function mi_tema_setup() {
  // Soporte HTML5
  add_theme_support(html5, array(search-form,comment-form,gallery))
  // Soporte de título dinámico
  add_theme_support(title-tag)
  // Imágenes destacadas
  add_theme_support(post-thumbnails)
  // Registrar ubicaciones de menú
  register_nav_menus(array(
    menu-principal =gt __(Menú Principal,mi-tema),
    menu-footer =gt __(Menú Footer,mi-tema),
  ))
}
add_action(after_setup_theme,mi_tema_setup)

4.2 Encolado de estilos y scripts

function mi_tema_scripts() {
  wp_enqueue_style(mi-tema-style, get_stylesheet_uri(), array(), 1.0.0)
  wp_enqueue_script(mi-tema-scripts, get_template_directory_uri()./assets/js/main.js, array(jquery), 1.0.0, true)
}
add_action(wp_enqueue_scripts,mi_tema_scripts)

5. Creación de plantillas principales

WordPress utiliza la jerarquía de plantillas para cargar el archivo adecuado. Veamos los más relevantes:

5.1 header.php

Incluye la etiqueta ltheadgt, llamado a wp_head() y apertura de ltbodygt.

lt!doctype htmlgt
lthtml gt
  ltmeta name=viewport content=width=device-width, initial-scale=1gt
  ltphp wp_head() gt
lt/headgt
ltbody 

5.2 footer.php

  ltfooter class=site-footergt
    ltpgtcopy ltphp echo date(Y) gt ltphp bloginfo(name) gtlt/pgt
    ltphp
      wp_nav_menu(array(
        theme_location =gt menu-footer,
        container =gt false,
      ))
    gt
  lt/footergt
  ltphp wp_footer() gt
lt/bodygt
lt/htmlgt

5.3 index.php amp loop básico

ltphp get_header() gt

ltmain class=site-maingt
  ltphp if(have_posts()): while(have_posts()): the_post() gt
    ltarticle id=post-ltphp the_ID() gt ltphp post_class() gtgt
      lth2gtlta href=ltphp the_permalink() gtgtltphp the_title() gtlt/agtlt/h2gt
      ltdiv class=entry-contentgtltphp the_excerpt() gtlt/divgt
    lt/articlegt
  ltphp endwhile else: gt
    ltpgtNo se encontraron entradas.lt/pgt
  ltphp endif gt
lt/maingt

ltphp get_sidebar() get_footer() gt

5.4 Otras plantillas

  • single.php: entrada individual con the_content().
  • page.php: página estática.
  • archive.php amp category.php: listados por fecha, categoría o taxonomía.
  • search.php: resultados de búsqueda.
  • 404.php: página de error, elemento crítico para la UX.

6. Estilos CSS y diseño responsivo

Underscores incluye un CSS base. Agrega tu propio archivo assets/css/style.css y modifícalo:

/ Tipografía y paleta minimalista /
body {
  font-family: Helvetica Neue, Helvetica, Arial, sans-serif
  color: #333
  margin: 0
  padding: 0
}
a { color: #0066cc text-decoration: none }
.site-header, .site-footer { background: #f9f9f9 padding: 20px text-align: center }
.site-main { padding: 30px }
/ Responsivo /
@media (max-width: 768px) {
  .site-main { padding: 15px }
  .main-navigation ul { display: flex flex-direction: column }
}

7. Menús, sidebars y widgets

En functions.php registra las áreas de widgets:

function mi_tema_widgets_init() {
  register_sidebar(array(
    name => __(Sidebar Principal,mi-tema),
    id   => sidebar-1,
    before_widget => ltdiv class=widget-areagt,
    after_widget => lt/divgt,
    before_title  => lth4 class=widget-titlegt,
    after_title   => lt/h4gt,
  ))
}
add_action(widgets_init,mi_tema_widgets_init)

Llama la barra lateral en sidebar.php:

ltaside id=secondary class=widget-areagt
  ltphp dynamic_sidebar(sidebar-1) gt
lt/asidegt

8. Customizer y traducción

8.1 Personalización en vivo

function mi_tema_customize_register(wp_customize) {
  // Título del sitio
  wp_customize->add_setting(mi_tema_logo)
  wp_customize->add_control(new WP_Customize_Image_Control(
    wp_customize, mi_tema_logo, array(
      label    => __(Logo,mi-tema),
      section  => title_tagline,
      settings => mi_tema_logo,
    )
  ))
}
add_action(customize_register,mi_tema_customize_register)

8.2 Internacionalización (i18n)

Añade en functions.php:

function mi_tema_textdomain() {
  load_theme_textdomain(mi-tema, get_template_directory()./languages)
}
add_action(after_setup_theme,mi_tema_textdomain)

Crea carpeta languages y genera el archivo mi-tema.pot con herramientas como Poedit o WP-CLI. Luego traduce a es_ES.po/mo, en_US.po/mo, etc.

9. Pruebas, validación y despliegue

Finalmente, comprime tu tema y súbelo a tu servidor de producción en /wp-content/themes/mi-tema/. Actívalo desde el panel de administración de WordPress.

Conclusión

Desarrollar un tema de WordPress con Underscores te proporciona una base sólida y actualizada, lista para personalizar y escalar según tus necesidades. Desde la configuración inicial hasta la publicación, este enfoque modular y minimalista garantiza un producto profesional, optimizado y fácil de mantener. Explora la documentación oficial de temas para profundizar aún más y mantener tu tema a la vanguardia de las mejores prácticas.



Acepto donaciones de BAT's mediante el navegador Brave 🙂



Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *