Son muchos los códigos que compartimos para añadir al archivo functions.php de los temas WordPress, y siempre está latente el peligro de no estar usando adecuadamente este importante fichero, que tantas posibilidades nos ofrece, y en el que deberíamos aplicar algunos criterios de uso para mantenerlo en buena forma.
Mi objetivo en esta entrada es recomendarte algunos consejos con los que tener un archivo functions.php lo más organizado, útil y optimizado que sea posible.
¡Empezamos!
¿Qué era eso del archivo functions.php?
A modo de recordatorio, el archivo functions.php es un fichero que incluyen todos los temas WordPress. Por defecto incluye funciones que utilizan los temas para añadir herramientas, ajustes y configuraciones, además de para organizar e integrarse con funciones nativas de WordPress.
Desde el archivo functions.php es desde donde se definen los ajustes más habituales de los temas, como añadir barras laterales, definir cómo se crean los títulos a incluso estilos y formatos, ya sea directamente en el archivo functions.php o mediante llamadas a otros ficheros del tema.
Además, cuando creas un tema hijo de tu tema WordPress activo, es muy común utilizar este archivo functions.php hijo para añadir funciones personalizadas para tu web, de manera que se ejecuten con los archivos del tema.
Puedes encontrar el archivo functions.php en la carpeta principal del tema activo, padre o hijo.
¿Qué debería añadirse y qué no al archivo functions.php?
Esto es un debate siempre abierto, sobre qué es lo conveniente añadir o no al archivo functions.php, y hay diversas opiniones, siendo las más populares estas dos:
- Solo deben añadirse al archivo
functions.phppersonalizaciones que afecten al tema activo, pues de hecho son funciones que se añaden al tema activo, que podrían cambiar si cambias de tema, añadiendo los códigos personalizados que no sean del tema, por ejemplo para WooCommerce o incluso el mismo WordPress u otros plugins, mediante un plugin de snippets de código, un plugin personalizado o incluso como mu plugin. - Todas las personalizaciones debe añadirse al archivo
functions.php, aunque no tengan que ver con el tema activo, pues se incluyen con la configuración actual, de la que el tema forma parte, y así te aseguras que las personalizaciones para la instalación vigente se carga con todo lo vigente: versión de WordPress, plugins y tema activo.
En mi opinión el método más correcto sería el primero, simplemente porque me parece más coherente, y además te ayuda e incluso fuerza a ser más organizado, separando las distintas personalizaciones según su objetivo y a qué componentes afecta.
Usa comentarios de código en el archivo functions.php
Ya se que la mayoría de las veces es incluso redundante comentar código que se explica por sí mismo, pero también te digo que esta idea es más un meme de programadores angloparlantes, porque para ellos sí lo es siempre, básicamente porque el código se escribe en inglés, así que un código que ya dice CREATE TABLE wp_options ya significa CREAR TABLA wp_options, por lo que no hace falta comentarlo como…
//Create table wp_options CREATE TABLE wp_options
Lógico ¿no?
Pero no es lo mismo para el resto del común de los mortales no angloparlantes, y no, no solo programadores van a tener que buscar códigos en el archivofunctions.php, otros técnicos, incluso el propietario de la web aunque no sea técnico, debería saber qué hace cada parte del código añadido a su web, en ocasiones por parte de varios desarrolladores que – a lo largo del tiempo – han ido añadiendo códigos.
Existe, además, otra justificación, y es que es bastante común que el archivo functions.php termine teniendo decenas, incluso cientos de funciones personalizadas, así que siempre será más fácil buscar o incluso identificar códigos específicos si el código está comentado, y no digamos si se hace con un mismo criterio, organización y algo de orden.
Así que – al menos yo – opino que es una buena práctica añadir comentarios de código al archivo functions.php del tema, por estos motivos.
Organiza el código del archivo functions.php
Como continuación a lo dicho anteriormente, comentes o no el código, es más que recomendable, es de profesionales organizar los códigos según su función, objetivo o tipo de personalización, para que todo tenga un orden y una organización mínima, que ayude en el futuro a tener todo bien ordenado, fácil de localizar, y también de quitar si fuese necesario.
Son montones de veces las que me encuentro todo tipo de ganchos, acciones, filtros, sin orden ni concierto, y cuando tienes que buscar varias funciones personalizadas relacionadas con un mismo asunto, por ejemplo para un plugin, que al cambiarlo tienes que quitar también, y o rebuscas bien o terminas dejándote algo.
Así que, por favor, si vas a añadir funciones personalizadas al archivo functions.php, hazlo de manera ordenada, juntando todas las que estén relacionadas, y si además comentas cada función y la sección completa mejor, dirá mucho y bueno de ti como profesional, e incluso como persona.
Un ejemplo de a lo que me refiero…
/** * Personalizaciones para editor de bloques Gutenberg * * @since 2.7.0 */ // Registrar estilos de Gutenberg function … ayudawp_nombre_funcion_ // Optimizar carga de scripts de Gutenberg function … ayudawp_nombre_funcion_ /** * Personalizaciones para editor clásico * * @since 1.5.0 */ // Añadir quicktag de paginación nextpage a editor clásico function … ayudawp_nombre_funcion_ // Usar estilos del tema en editor clásico function … ayudawp_nombre_funcion_ /** * Personalizaciones para tema Astra * * @since 1.0.0 */ // Cambiar miniaturas tema Twenty-Ten function … ayudawp_nombre_funcion_ // Colores de enlaces Twenty-Ten function … ayudawp_nombre_funcion_
¿Se entiende, no?
Evita conflictos con WordPress, plugins y temas
Es muy común encontrarse códigos personalizados que generan errores por no contemplar la remota – llámame loco – posibilidad de que haya ya otra función que se llame igual, o que sea redundante, incluso códigos que requieren de plugins o temas que ya no están disponibles.
Así que, para evitar conflictos con plugins, temas o el mismo núcleo de WordPress, acostúmbrate a cumplir estas sencillas reglas:
- Comprueba siempre si existe ya o no una función antes de definirla por tu cuenta.
- Utiliza nombres de funciones únicos con el prefijo de tu tema activo o del plugin al que se aplique.
- Envuelve el código en condicionales cuando sea conveniente, por ejemplo, si una función solo debe ejecutarse en páginas específicas, o si está presente un plugin concreto, etc.
Por si te ayuda, un ejemplo bastante completo de a lo que me refiero:
/** Optimizar CF7 **/
function ayudawp_dequeue_cf7_scripts() {
$load_scripts = false;
if( is_singular() ) {
$post = get_post();
if( has_shortcode($post->post_content, 'contact-form-7') ) {
$load_scripts = true;
}
}
if( ! $load_scripts ) {
wp_dequeue_script( 'contact-form-7' );
wp_dequeue_style( 'contact-form-7' );
}
}
add_action( 'wp_enqueue_scripts', 'ayudawp_dequeue_cf7_scripts', 99 );
En este código se aplican varias técnicas para evitar conflictos:
- Función con nombre único (
ayudawp_dequeue_cf7_scripts) para que no coincida con ninguna función estándar ni incluso con otras funciones personalizadas. - Condicional para que la función solo se ejecute si es una entrada individual, no en toda la web (
if( is_singular() )). - Condicional para que la función solo se ejecute si se encuentra el shortcode de un plugin, en este caso Contact Form 7, dentro del contenido de la entrada (
if( has_shortcode($post->post_content, 'contact-form-7') ))
Con estas sencillas convenciones estaríamos añadiendo un código que con toda seguridad no va a dar problemas ni conflictos con otros componentes de la web, y que se ejecutará únicamente cuándo y donde queremos que lo haga.
Utiliza convenciones estándar de nomemclatura
Adicional a estos consejos para evitar conflictos, también es recomendable, incluso necesario atendiendo a lo anteriormente visto, que te acostumbres a algunas convenciones sobre cómo nombrar funciones. A saber…
- Añade a tus funciones elementos que permitan identificar claramente su objetivo.
- Añade a tus funciones elementos que permitan identificar claramente su ámbito de aplicación.
- Añade a tus funciones elementos que permitan identificar a su autor (normalmente tú).
- Utiliza letras minúsculas y guiones bajos
Ejemplo que creo que muestra bastante bien todo esto:
ayudawp_mitema_register_sidebars()
El ejemplo anterior indica claramente tanto el autor (ayudawp), como el ámbito de aplicación (mitema) como el propósito (register_sidebars).
Organiza las funciones incluyendo varios archivos
En ocasiones la cosa puede desmadrarse y te encontrarás con que el archivo functions.php adquiere unas dimensiones que lo empiezan a hacer complejo, a veces incluso inmanejable.
Si llegas a un punto en el que a ti mismo te cueste encontrar las funciones dentro del archivo functions.php es que ha llegado el momento de separar tus funciones personalizadas en varios archivos e invocarlas desde el archivo functions.php usando includes.
Y sí, al igual que con los mu-plugin, también se pueden organizar y separar las funciones del archivo functions.php en varios archivos, organizados incluso en carpetas.
El procedimiento es realmente sencillo, y te sorprenderás de no haberlo empleado antes, por lo cómodo, organizado y limpio que dejas todo.
- Crea una estructura de carpetas que te sea útil y fácil de comprender:
- Dentro de la carpeta de tu tema (por ejemplo, wp-content/themes/mitema/), crea una carpeta llamada
includespara almacenar los archivos PHP independientes que vayas a usar. - Opcionalmente, dentro de la carpeta
includes, puedes crear además otras subcarpetas para organizar aún más el código, comoadmin,tema,shortcodes,woocommerce, etc.
- Dentro de la carpeta de tu tema (por ejemplo, wp-content/themes/mitema/), crea una carpeta llamada
- Divide el código en archivos lógicos:
-
- Agrupa las funciones por propósito:
- Funciones de personalización del tema en personalizar.php.
- Funciones para el tema en tema.php.
- Funciones de rendimiento en optimizar.php.
- Funciones para shortcodes en shortcodes.php.
- Etc.
-
- Haz
includede los archivos en el ficherofunctions.php:- Si fuese necesario usa
require_onceoinclude_oncepara cargar los archivos PHP individuales de manera aún más óptima.
- Si fuese necesario usa
Un ejemplo de estructura podría ser así:
wp-content/themes/mitema/ ├── functions.php ├── includes/ │ ├── optimizar.php │ ├── personalizar.php │ ├── tema.php │ ├── shortcodes.php │ └── admin/ │ ├── administrar.php │ └── ajustes.php
Y luego desde tu archivo functions.php hacías llamadas a los distintos ficheros:
<?php
/**
* Mitema - Functions
* Include de todos los archivos de funciones individuales
*/
// Cargamos los archivos de funciones desde la carpeta includes
$includes = [
'includes/optimizar.php', // Optimizaciones de scripts y estilos
'includes/personalizar.php', // Ajustes propios para el personalizador
'includes/tema.php', // Cosas del tema activo
'includes/shortcodes.php', // Shortcodes personalizados
];
// Cargamos archivos específicos que solo afectan a la administración
if ( is_admin() ) {
$includes[] = 'includes/admin/administrar.php';
$includes[] = 'includes/admin/ajustes.php';
}
// Finalizamos incluyendo todos los archivos
foreach ( $includes as $file ) {
if ( file_exists( get_theme_file_path( $file ) ) ) {
require_once get_theme_file_path( $file );
}
}
?>
Luego, cada archivo PHP tendrá una estructura sencilla, y cada cual incluirá las funciones relativas a su propósito. Por ejemplo, el fichero optimizar.php podría ser así:
<?php
/**
* Optimización de estilos scripts.
*/
function ayudawp_mitema_optimizar_estilos_scripts() {
// Cargamos el CSS principal
wp_enqueue_style( 'mitema-style', get_stylesheet_uri(), [], '1.0.0' );
// Cargamos un script personalizado
wp_enqueue_script( 'mitema-script', get_theme_file_uri( 'js/custom.js' ), [ 'jquery' ], '1.0.0', true );
}
add_action( 'wp_enqueue_scripts', 'ayudawp_mitema_optimizar_estilos_scripts' );
?>
Y así lo que quieras incluir en cada fichero PHP que invoques desde el archivo functions.php.
Ten en cuenta el rendimiento
Optimiza tu código para mejorar el rendimiento:
- Usa ganchos (hooks) con las acciones apropiadas en lugar de ejecutar código en todas las páginas.
- Utiliza tags condicionales para limitar la ejecución a páginas específicas.
- Almacena en caché los resultados de las operaciones que consuman muchos recursos.
- Reduce al mínimo las consultas a la base de datos.
Un código bien optimizado mejora la velocidad del sitio y la experiencia de los usuarios de la web.
Protege el archivo functions.php
Para finalizar, es vital que, debido a su enorme importancia, protejas todo lo posible el archivo functions.php, para lo que ya escribí una sencilla guía, que te dejo a continuación…
Nada más, que caiga ahora mismo, y si falta algo lo hablamos juntos abajo en los comentarios, todo es mejorable 🙂
Gracias por haber llegado hasta aquí.
¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!







Un programador que no sea angloparlante, yo creo que está muerto.
Todos los lenguajes de programación son basados en inglés.
Incluso cuando estudié los «pseudo lenguajes» eran basados en inglés.
Uy que va, te sorprenderías. Lo que hacen muchos que no dominan, siquiera conocen mínimamente el inglés, es memorizar, punto
Te creo, ya vi programas escrito en mezcla de idiomas, cosa terrible. Los que han trabajado conmigo tuvieron que usar nombres de variables en y hasta documentar en inglés, solo por coherencia y continuidad. Hoy ja será mas fácil con ChatGPT y similares …