Si alguna vez has personalizado tu tema y has visto cómo una actualización borraba todos tus cambios, ya sabes por qué existe el child theme WordPress (o tema hijo). Un child theme es un tema que hereda todo el diseño y la funcionalidad de otro tema (el padre) y te permite modificar solo lo que quieras cambiar: unos estilos, una plantilla, unas funciones. La gracia del invento es que tus cambios viven en una carpeta separada, de modo que cuando el tema padre se actualiza (y debe actualizarse, por seguridad y compatibilidad), tus personalizaciones permanecen intactas. Es el mecanismo oficial de WordPress para personalizar temas de terceros, y crearlo cuesta literalmente dos archivos y cinco minutos. En esta guía vemos qué es exactamente un tema hijo, cuándo lo necesitas de verdad (y cuándo no), cómo crearlo paso a paso con el código completo, cómo funciona la jerarquía de plantillas que lo hace posible y los errores típicos que conviene esquivar desde el principio.
Qué es un child theme y cómo funciona la herencia
Un tema hijo es una carpeta dentro de wp-content/themes que declara, mediante una línea en su hoja de estilos, que su padre es otro tema instalado. A partir de esa declaración, WordPress aplica una regla simple y potente:
- Para las plantillas PHP: si el archivo existe en el hijo, se usa el del hijo; si no, se usa el del padre. Copiar
header.phpdel padre al hijo y editarlo ahí sustituye la cabecera sin tocar el original. - Para los estilos y funciones: no se sustituyen, se suman. El
functions.phpdel hijo se carga además del padre (y antes), y el CSS del hijo se encola junto al del padre para sobrescribir reglas concretas.
El resultado práctico: el tema padre sigue siendo el motor (y puede actualizarse con normalidad), mientras el hijo actúa como una capa fina con tus diferencias. Actualizar el padre nunca toca la carpeta del hijo, así que tus cambios sobreviven a cualquier actualización.
Cuándo necesitas un tema hijo (y cuándo no)
No toda personalización justifica un child theme. La línea divisoria es clara:
Sí necesitas un child theme si…
- Vas a editar archivos del tema: plantillas PHP, o CSS más allá de unos pocos ajustes.
- Quieres añadir funciones ligadas al diseño (registrar un menú extra, un área de widgets, tamaños de imagen).
- Mantienes webs de clientes donde las actualizaciones deben poder aplicarse sin miedo.
No lo necesitas si…
- Solo quieres unos retoques de CSS: el campo «CSS adicional» del personalizador (o de los estilos globales en temas de bloques) los guarda en la base de datos, a salvo de actualizaciones.
- Tu cambio es funcionalidad pura (un shortcode, un ajuste de WooCommerce, un snippet de seguimiento): eso pertenece a un plugin o a un gestor de snippets como WPCode, porque debe sobrevivir también a un cambio de tema.
- Usas un tema de bloques moderno y todos tus cambios caben en el editor del sitio: las modificaciones hechas ahí ya se guardan en la base de datos.
La regla de oro: diseño que toca archivos del tema, al child theme; funcionalidad independiente del diseño, a un plugin. Y si estás eligiendo tema todavía, hazlo pensando también en esto: un buen tema bien mantenido merece la pequeña inversión de crearle un hijo antes de personalizar. En nuestra guía sobre cómo elegir el tema perfecto para tu web WordPress repasamos qué señales distinguen a un tema sólido.
Cómo crear un child theme WordPress paso a paso
Vamos a crear un tema hijo para un tema padre de ejemplo; usaremos Astra, pero el proceso es idéntico para cualquier tema clásico: solo cambia el identificador del padre. Necesitas acceso a los archivos (SFTP o el gestor del hosting) o, en local, tu explorador de archivos.
Paso 1: crea la carpeta
Dentro de wp-content/themes, crea una carpeta nueva. Por convención se usa el nombre del padre con el sufijo -child:
wp-content/themes/astra-child/
├── style.css
└── functions.php
Paso 2: crea style.css con la cabecera
El archivo style.css es obligatorio y su cabecera de comentario es lo que convierte la carpeta en un tema. La línea crítica es Template: debe contener el nombre exacto de la carpeta del tema padre (sensible a mayúsculas):
/*
Theme Name: Astra Child
Theme URI: https://biblioweb.es/
Description: Tema hijo de Astra para personalizaciones seguras
Author: BiblioWeb
Author URI: https://biblioweb.es/
Template: astra
Version: 1.0.0
Text Domain: astra-child
*/
/* A partir de aquí, tus estilos personalizados. */
Paso 3: encola los estilos en functions.php
Al contrario de lo que se hacía antiguamente (con @import, hoy desaconsejado por lento), la hoja del padre se carga con un encolado correcto desde functions.php:
<?php
/**
* Encolar la hoja de estilos del tema padre y la del hijo.
*/
add_action( 'wp_enqueue_scripts', 'astra_child_enqueue_styles' );
function astra_child_enqueue_styles() {
// Estilos del padre.
wp_enqueue_style(
'astra-parent-style',
get_template_directory_uri() . '/style.css',
array(),
wp_get_theme( get_template() )->get( 'Version' )
);
// Estilos del hijo, cargados después para poder sobrescribir.
wp_enqueue_style(
'astra-child-style',
get_stylesheet_directory_uri() . '/style.css',
array( 'astra-parent-style' ),
wp_get_theme()->get( 'Version' )
);
}
Fíjate en el detalle de las dos funciones gemelas: get_template_directory_uri() apunta siempre al padre y get_stylesheet_directory_uri() al hijo. Confundirlas es el origen de la mitad de los problemas con temas hijos. Nota: algunos temas (Astra entre ellos) ya encolan sus estilos de forma que el hijo se carga solo; si ves los estilos duplicados, simplifica el encolado dejando solo la hoja del hijo con la dependencia adecuada.
Paso 4: activa y comprueba
Ve a Apariencia → Temas: verás «Astra Child» como un tema más. Actívalo. La web debe verse exactamente igual que con el padre; si se ve sin estilos, revisa el valor de Template y el encolado. Con esto, tu child theme WordPress ya está activo y listo para recibir personalizaciones. Opcionalmente, añade una imagen screenshot.png (1200×900) a la carpeta del hijo para que luzca miniatura en el selector.
Paso 5 (opcional): sobrescribe plantillas
Para modificar una plantilla del padre, cópiala al hijo respetando su ruta relativa y edítala allí. Por ejemplo, para personalizar la plantilla de entradas individuales, copia single.php del padre a la raíz del hijo; para una plantilla dentro de subcarpetas (frecuente en WooCommerce), respeta la estructura: woocommerce/single-product.php. WordPress usará tu copia automáticamente.
Qué personalizar desde el tema hijo: ejemplos útiles
Con la estructura montada, el hijo se convierte en tu espacio de trabajo seguro. Algunos usos habituales:
Estilos propios
/* En style.css del hijo */
.site-title {
font-size: 2.2rem;
letter-spacing: -0.02em;
}
.entry-content a {
text-decoration: underline;
text-underline-offset: 3px;
}
Funciones ligadas al diseño
// En functions.php del hijo: registrar un menú adicional.
add_action( 'after_setup_theme', 'astra_child_menus' );
function astra_child_menus() {
register_nav_menu( 'menu-legal', 'Menú legal del pie' );
}
// Un tamaño de imagen a medida para tarjetas del blog.
add_action( 'after_setup_theme', 'astra_child_image_sizes' );
function astra_child_image_sizes() {
add_image_size( 'tarjeta-blog', 600, 400, true );
}
Recuerda el criterio de la sección anterior: si el snippet no depende del diseño (analítica, redirecciones, ajustes de comportamiento), no lo pongas en el functions.php del hijo; llévalo a un plugin propio o a un gestor de snippets, para que sobreviva a un futuro cambio de tema. Muchos de los plugins esenciales de WordPress existen precisamente para no tener que meter de todo en el tema.
Errores comunes con los child themes
- Template mal escrito. Si
Template: astrano coincide exactamente con el nombre de la carpeta del padre, WordPress mostrará el hijo como «roto». Es el fallo número uno. - Usar @import en el CSS. Funciona, pero serializa las descargas y penaliza la velocidad. Encola siempre desde
functions.php. - Copiar plantillas de más. Cada plantilla copiada al hijo deja de recibir las mejoras que el padre incorpore en sus actualizaciones. Copia solo lo que realmente vayas a modificar, y revisa tus copias cuando el padre publique cambios grandes.
- Confundir functions.php. El del hijo no sustituye al del padre: ambos se cargan. Si declaras una función con el mismo nombre que una del padre no «la sobrescribes»: provocas un error fatal, salvo que el padre la haya envuelto en
function_exists(). - Crear el hijo después de personalizar el padre. El orden correcto es: instalar padre, crear hijo, activar hijo, y solo entonces personalizar. Los ajustes del personalizador se guardan por tema, así que al activar el hijo puede tocar reconfigurar algunas opciones (o migrarlas con un plugin de exportación de ajustes).
- Editar sin copia de seguridad. Un error de sintaxis PHP en
functions.phptumba la web. Edita por SFTP (nunca desde el editor de archivos del escritorio en producción) y ten copia reciente para deshacer rápido.
Child themes y temas de bloques: el matiz de 2026
Con los temas de bloques (Full Site Editing), buena parte de la personalización clásica (cabeceras, pies, plantillas) se hace visualmente en el editor del sitio y se guarda en la base de datos, no en archivos. Eso reduce los casos en que un child theme es imprescindible, pero no lo jubila: sigue siendo la vía correcta para añadir CSS estructurado, modificar theme.json (la configuración de estilos globales del tema, que el hijo también puede sobrescribir), registrar patrones propios o tocar plantillas HTML del padre. El mecanismo de herencia funciona igual: mismo style.css con su Template, y las plantillas del hijo (en la carpeta templates/) tienen prioridad sobre las del padre. La referencia completa está en el manual oficial de child themes de developer.wordpress.org.
Preguntas frecuentes
¿Un child theme afecta al rendimiento de WordPress?
El impacto es despreciable: una hoja de estilos adicional (a menudo minúscula) y un functions.php extra. Bien construido, con el encolado correcto y sin @import, un tema hijo no ralentiza la web de forma medible.
¿Puedo crear un child theme de un child theme?
No. WordPress solo admite un nivel de herencia: un hijo no puede ser padre de otro tema. Si necesitas variantes, trabaja con un solo hijo bien organizado o valora un enfoque distinto (plantillas propias, plugin de personalizaciones).
¿Qué pasa si cambio de tema padre?
El hijo está ligado a su padre concreto: si activas otro tema, el hijo deja de funcionar tal cual. Los estilos y plantillas rara vez son trasladables (dependen de las clases y estructura del padre), pero las funciones independientes del diseño sí, otro motivo para mantenerlas en un plugin y no en el tema.
¿Hay plugins que creen el child theme por mí?
Sí, plugins como Child Theme Configurator generan la estructura con un clic e incluso migran los ajustes del personalizador del padre al hijo. Son una opción legítima si no quieres tocar archivos, aunque como has visto el proceso manual son dos archivos y cinco minutos, y entenderlo te servirá cada vez que algo no cuadre.
Conclusión
El child theme WordPress es una de esas piezas pequeñas que definen la diferencia entre personalizar bien y personalizar con fecha de caducidad. Dos archivos (style.css con su cabecera y functions.php con el encolado) bastan para separar tus cambios del tema original y blindarlos frente a actualizaciones. Las reglas para no equivocarse caben en tres líneas: crea el hijo antes de personalizar, copia al hijo solo las plantillas que de verdad modifiques, y reserva el functions.php del tema para funciones de diseño, dejando la funcionalidad general en plugins. Si tu web usa un tema de terceros y tienes pensado tocar una sola línea de sus archivos, no lo dudes: monta el tema hijo hoy. Es la inversión de cinco minutos más rentable del ecosistema WordPress.