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.
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
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 }
}
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
- Revisa la compatibilidad con las guías de desarrollo de temas de WordPress: WordPress Theme Handbook.
- Prueba de rendimiento usando GTmetrix o PageSpeed Insights.
- Validación de HTML/CSS en W3C Validator.
- Pruebas de accesibilidad con WAVE o Accessibility Insights.
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 🙂 |