Seleccionar página

childthemes

Un error muy común en WordPress suele ser descargar o comprar un Theme, ponerlo, y empezar a querer cambiar cosas. Si el Theme viene con un cuadro para cambios por CSS, no hay problema. Si no, empieza a haberlos. Y si lo que queremos cambiar es algo más que simplemente CSS, funcionalidades y demás, entonces apaga y vámonos. La solución más común es abrir los archivos del Theme y editar.

¡EEERROR! Esto jamás se debe hacer. Porque si tenemos un Theme hecho por otra persona, cabe la posibilidad de que en algún momento se actualice. Para cubrir agujeros de seguridad, para arreglar bugs, por mil motivos. ¿Y qué pasará en ese momento? Que perderemos todos los cambios.

¿Qué soluciones tenemos para esto? Podemos crear un plugin que añada funcionalidades a nuestro Theme, pero normalmente esto es un parche difícil de aplicar, ya que no siempre podremos acceder a todos los entresijos del Theme desde un Plugin. La solución más eficiente y elegante es un Theme Child, es decir, un Tema Hijo.

¿Qué es un Tema Hijo?

Un Tema Hijo es un Tema que depende directamente de otro, que llamaremos Tema Padre, de forma que podemos extender o modificar sus funcionalidades sin que una futura actualización nos pise nada.

Evidentemente, esta es una solución que necesita un desarrollador que la lleve a cabo, puesto que requiere tocar código. Creo que esto ya había quedado claro, pero por si acaso lo confirmo.

Lo que hagamos en un Tema Hijo prevalecerá sobre lo codificado en el Tema Padre, aunque no todos los archivos se cargan en el mismo orden. Por ejemplo, los estilos se cargan después de los del Tema Padre (por norma general, el CSS que se carga más tarde es el que prevalece), pero el archivo functions.php del Tema Hijo se adiciona al del Tema Padre cargándose antes que este. Las plantillas y otros archivos de lógica y funcionamiento del Tema Hijo sustituirán directamente a los del Tema Padre.

Es una filosofía muy similar al concepto de Herencia en otros lenguajes, puesto que el Tema Hijo “heredará” del Tema Padre todo lo que no sustituyamos expresamente, y ampliará sus funciones.

¿Cómo se crea un Tema Hijo?

Pues tenemos dos temas, papa y mamá, y… No, no, no tiene nada que ver.

Para crear un Tema Hijo, nos vamos a wp-content/themes y creamos una carpeta con el mismo nombre que la carpeta del Tema Padre, seguida de “-child“, o “-hijo”, eso ya como queramos. Si queremos crear un Tema Hijo del Tema Twenty Fourteen, crearíamos la carpeta “twentyfourteen-child“.

Al contrario que con los Temas normales, sólo se nos exige tener un archivo: el style.css. Es normal, puesto que el resto de archivos, por defecto, se obtendrán del Tema Padre. El archivo style.css debe tener una cabecera similar a esta:

Este es un ejemplo que continúa el anterior, es decir, seguimos creando un Tema Hijo de Twenty Fourteen. Las líneas importantes son Theme Name y Template. Theme Name es el nombre del Tema seguido de Child, y Template tiene como valor el nombre de la carpeta donde está el Tema Padre. En este caso, twentyfourteen. El resto de la información la podemos cambiar, pero estos dos valores deben seguir esas normas.

Plantillas

Como ya hemos dicho, establecer una plantilla en un Tema Hijo sustituirá a la misma plantilla en el Tema Padre, si existe.

Si en el Tema Padre tenemos un archivo template-homepage.php, creando en el Tema Hijo el mismo archivo nos da la opción de recodificarlo completamente. Esto afecta a cualquier archivo, no solo a las plantillas. Podemos modificar los archivos de header y footer, por ejemplo, para que sean diferentes a los del Tema Padre, o los archivos single.php y archive.php, para que se comporten de manera diferente.

Además, podemos crear nuevas plantillas aunque no existan en el Tema Padre. WordPress las tomará como válidas y las usará sin problema. Como ya hemos dicho, un Tema Hijo no solo sirve para modificar, también para extender la funcionalidad del Padre.

El archivo functions.php

Es importante recalcar que el archivo functions.php del Tema Hijo no sobreescribe al del Tema Padre. Sería totalmente ilógico. La realidad es que el functions.php hijo se adiciona al functions.php padre. Aunque en realidad ocurre al revés, puesto que primero se cargará el functions.php hijo.

Esto nos proporciona la seguridad de que nuestras nuevas funciones no van a ser borradas con una actualización, y además, no tenemos que copiar todas las funciones que ya teníamos en el functions.php padre, se van a cargar igualmente.

¿Podemos sustituir funciones que existan en el Tema Padre? Sí, de hecho, esa es la base fundamental de que el functions.php hijo se cargue primero. Podemos hacer lo siguiente:

Internacionalización

Los Temas Hijos también pueden prepararse para admitir traducciones, pero debemos tener en cuenta un par de detalles:

  • Los idiomas, como siempre, deben estar en una carpeta dentro de la carpeta del Theme, por ejemplo, /wp-content/mi-tema-child/languages.
  • Los nombres de los archivos de traducción .po y .mo deben seguir la estructura es_ES.po y es_ES.mo (dependiendo del lenguaje), y no dominio-es_ES.po, que es como funciona la internacionalización en los plugins.
  • En un Tema Hijo, configuraremos que se cargue la traducción usando la función load_child_theme_textdomain. Es una acción que estableceremos en el hook “after_setup_theme“.

Otros detalles interesantes

Para referenciar archivos del Tema Hijo, usaremos get_stylesheet_directory. Esta función ahora se refiere al Tema Hijo, que es el Tema activo, y nos devolverá el directorio del Tema Hijo. Así que si necesitamos, por algún motivo, incluir en nuestro Tema un archivo, podemos hacerlo así:

Ojo a los formatos de entrada. El Tema Hijo hereda los formatos de entrada definidos en el Tema Padre. Si utilizamos la función “add_theme_support(‘post-formats’)” para establecer que el tema soporta formatos de entrada, sobreescribiremos los que ya están configurados en el Tema Padre en lugar de adicionarse a estos.

Acabamos de ver cómo un Tema Hijo puede modificar a un Tema Padre, heredando el resto de funcionalidad y detalles, sin necesidad de modificar directamente el Tema Original y sin miedo a que se pierda nuestro trabajo con futuras actualizaciones. Es una muestra más de que WordPress nos hace la vida más fácil a los desarrolladores web.

“Medir el progreso del desarrollo de software por líneas de código
es como medir el progreso de la construcción de un avión por su peso”
.- Bill Gates