Cómo trabajar con un archivo de funciones sin cometer errores

Qué es y para qué sirve el archivo ‘functions.php’ de los temas de WordPress

En casi todos los tutoriales y artículos que explican cómo hacer algo con WordPress se habla del archivo ‘functions.php’. Quienes estamos familiarizados con este gestor de contenidos sabemos que es un archivo muy potente a la hora de desarrollar un tema para una web. Pero este control viene necesariamente acompañado de cierta responsabilidad. Un pequeño error en este archivo y podemos dejar completamente inutilizada una web entera. Por eso conviene conocerlo bien y asegurarnos de que lo utilizamos correctamente.

¿Qué es y para qué sirve el archivo ‘functions.php’?

‘functions.php’ es un archivo de funciones opcional disponible en cualquier tema de WordPress. Para que un tema funcione, no es necesario que exista este archivo, por eso según el que estemos utilizando, puede que ya esté creado o bien que lo tengamos que generar nosotros mismos si queremos ampliar el funcionamiento de un blog o una web.

Una vez creado el archivo, podemos utilizar ganchos (hooks) de WordPress, acciones y filtros para modificar prácticamente cualquier aspecto del sistema.

‘functions.php’ funciona como una biblioteca personal de funciones, es una manera fácil de ampliar, cambiar o alterar el comportamiento por defecto de WordPress. Se comporta exactamente igual que un plugin, añadiendo características y funcionalidad a una web, y se puede utilizar tanto para definir nuevas funciones PHP como para modificar las que ya incorpora el sistema.

Cada tema viene con su propio archivo de funciones, pero solo tendrán efecto las del tema activo. Muchas plantillas (especialmente las Premium y las más trabajadas) ya vienen con este archivo creado y cargado de funciones. Pero de todas formas, si nuestro tema no cuenta con él, podemos añadirlo nosotros mismos fácilmente. Solo hay que crear un archivo de texto sin formato nuevo, llamarlo “functions.php” y guardarlo dentro del directorio de nuestro tema.

Si te es más fácil, más abajo en este artículo puedes descargar ejemplos de plantillas de functions.php.

Una vez creado el archivo, podemos utilizar ganchos (hooks) de WordPress, acciones y filtros para modificar prácticamente cualquier cosa que tenga que ver con el sistema. El resultado será el mismo que si utilizamos un plugin de funciones y lo activamos desde el area de administración.

¿Por qué es tan popular?

La razón por la que casi siempre se habla de este archivo en los tutoriales es porque es más fácil y rápido añadir código en este archivo (que seguramente ya existe en el tema), que crear un plugin nuevo. El efecto sería el mismo, pero los plugins necesitan una descripción inicial con los detalles de la extensión, además de ser activados manualmente.

Pero la facilidad y libertad que ofrece WordPress para alterar y personalizar un diseño y su funcionamiento no debería llevarnos al extremo de cargar el archivo ‘functions.php’ de cualquier manera. No es una buena idea meter aquí todo tipo de códigos encontrados por Internet si no entendemos un poco lo que estamos haciendo.

De la misma manera que tenemos que tener cierto control a la hora de instalar plugins (por temas de rendimiento y seguridad), lo mismo pasa con ‘functions.php’. Un archivo descontrolado y mal organizado puede traer consecuencias poco agradables.

El uso de ‘functions.php’ solo está limitado por la imaginación de cada uno y por la destreza que tengamos trabajando con código PHP.

¿Dónde está este archivo?

Dónde está functions.phpSe encuentra dentro de la carpeta de cada tema. Si el tema que tenemos instalado se llamara “mytheme”, encontraríamos el archivo ‘functions.php’ en la ruta:

/wp-content/themes/mytheme/functions.php

Es probable que al abrir la carpeta del tema no encontremos ningún archivo con ese nombre. En este caso, podemos crear uno nuevo añadiendo un archivo de texto sin formato (para esto no sirve un procesador de textos) y darle el nombre “functions.php”. Después tenemos que guardarlo dentro del directorio que incluye el resto de archivos del tema (es decir, al mismo nivel que “style.css”).

Más abajo encontrarás un enlace para descargar un archivo functions.php vacío para utilizarlo como base.

En las webs gratuitas alojadas en “wordpress.com” no es posible acceder a este archivo ni a ningún otro código PHP, como tampoco está permitido instalar plugins o cambiar los estilos CSS.

¿Cómo se añade código en ‘functions.php’?

Si el archivo ya existe, podemos añadir código directamente desde el editor incluído con WordPress (en Apariencia > Editor). No es lo más recomendable, ya que no nos ofrece ningún tipo de ayuda visual (por ejemplo con colores, para diferenciar bien cada elemento) ni tampoco podemos deshacer lo que incluímos. Lo ideal es utilizar un gestor FTP y un editor de código como Coda, Sublime Text, Expresso, Dreamweaver, etc.

El archivo ‘functions.php’ debe empezar con la etiqueta de apertura de PHP “<?php”. Después de esta etiqueta ya podemos escribir o pegar código.

El código no tiene por qué tener un orden determinado, aunque lo suyo es, por comodidad, ordenarlo por tipo de funcionalidad, para después poder encontrar más fácilmente cada fragmento (especialmente si estamos trabajando en un diseño que va a pasar por otras manos).

Es recomendable (aunque totalmente opcional) comentar lo mejor posible cada función o fragmento de código que añadimos, para que así, cuando volvamos meses después a revisarlo sea más fácil para nosotros o para otros desarrolladores encontrar cada parte.

Cómo crear funciones personalizadas

Aparte de insertar fragmentos de código ya escritos (que es lo más habitual cuando empezamos a trabajar con Temas de WordPress), en functions.php podemos crear nuestras propias funciones personalizadas para utilizarlas después desde otras plantillas.

Una función es simplemente un nombre que le damos a un bloque de código que se ejecutará cada vez que llamemos a esta función. Por ejemplo, si tuviéramos que utilizar una función determinada en unos cuantos lugares (single.php, page.php, index.php…), en vez de incluirla varias veces, sería buena idea escribirla solo una vez y llamarla cada vez que la necesitemos. Con esto, además de mantener ordenados los archivos que forman parte del Tema, ganaremos en legibilidad y productividad, ya que, si tenemos que hacer algún cambio, solo será necesario editar el código una vez.

Crear una función nueva es muy fácil. Este sería el esquema:

function imprimir_fecha() {
	// Aquí incluímos el contenido
	// Ejemplo: imprimimos la fecha
	echo 'Hoy es ' . date('d/m/Y');
}

Para empezar, tenemos que escribir la palabra “function” seguida de un nombre que la identifique. El nombre de la función es libre, depende completamente de nosotros, pero es importante seguir unas reglas básicas de formato:

  • Separar las palabras con guión bajo (mi_nueva_funcion) o con mayúsculas (miNuevaFuncion)
  • No empezar con un número. Este nombre no serviría: 35_mi_nueva_funcion
  • En WordPress se suele añadir un prefijo (normalmente el nombre del Tema), para asegurarnos de que los nombres son únicos. Por ejemplo: twentythirteen_nueva_funcion

Después del nombre hay que incluir los paréntesis, que se utilizan para añadir parámetros opcionales (los parámetros son opciones, pero los paréntesis no), y finalmente las llaves de inicio y cierre: { }.

Después, para llamar a esta función, simplemente tenemos que incluir su nombre (junto con los paréntesis) en el punto concreto de la/s plantilla/s que nos interese. Así:

<?php imprimir_fecha(); ?>

En este caso, nuestra función lo único que hace es imprimir la fecha actual, pero lógicamente podrá ser tan compleja como queramos e incluir todo tipo de argumentos, funcionalidad, etiquetas de WordPress, etc.

Un ejemplo más interesante: cómo imprimir la ruta de la plantilla activa en WordPress.

Errores frecuentes

Como es tan fácil utilizarlo y al mismo tiempo tan potente, si no entendemos bien lo que hacemos y nos dedicamos a pegar fragmentos de código que vamos encontrando por Internet, es fácil que accidentalmente cometamos errores básicos, como por ejemplo mezclar etiquetas PHP (pegar el código sin tener en cuenta las etiquetas de apertura y cierre de PHP), o añadir código en algún lugar inapropiado.

<?php
// Código ya existente

<?php
// Código que hemos encontrado en Internet y hemos pegado
// sin tener en cuenta que hemos duplicado la apertura
// y el cierre de PHP.
?>

?>

Aquí arriba podemos ver un ejemplo de código incorrectamente formado. Es algo muy elemental, pero es el error más frecuente al utilizar el archivo ‘functions.php’.

Aparte de esto, cualquier otro error típico de PHP afectará a todo el sistema, como funciones mal cerradas, condicionales que no terminan con “endif;” cuando utilizamos la sintaxis alternativa, variables no definidas correctamente, etc.

Otros errores frecuentes al cargar scripts externos.

¿Hace falta la etiqueta de cierre de PHP?

El código escrito en PHP va entre etiquetas “<?php” y “?>”. La etiqueta de apertura es necesaria, pero la de cierre, en este archivo, es opcional.

Según los estandares de código de WordPress, solo se añaden etiquetas de cierre “?>” en los archivos que no tienen que ser editados por los usuarios. Es decir que tanto el archivo ‘functions.php’ de los temas como ‘wp-config.php’ pueden dejarse sin cerrar, para evitar problemas, como los errores tipo ‘headers already sent‘. El resto de archivos PHP del nucleo del sistema deben cerrarse.

No conviene utilizar la etiqueta de apertura de PHP abreviada “<? … ?>” ni tampoco “<script language="php"> … </script>”.

Diferencias entre un plugin y el archivo functions.php

El archivo debería contener únicamente aquellas funciones específicas del tema en el que está incluido. Si lo que queremos es añadir alguna funcionalidad general que debería permanecer activa aunque el usuario cambie de tema, entonces deberíamos utilizar un plugin.

Si cambiamos el diseño de nuestra web con otro tema, la funcionalidad del plugin seguirá teniendo efecto, mientras que si utilizamos el archivo ‘functions.php’, la funcionalidad desaparecerá al cambiar de diseño

Los plugins de WordPress tienen que tener una cabecera con los detalles de cada extensión, mientras que el archivo de funciones del theme es más libre en este sentido. No es necesario (aunque sí extremadamente útil, especialmente si contiene mucho código) ningún tipo de comentario ni descripción.

Para que un plugin se pueda activar y entrar en funcionamiento, sus archivos tienen que estar guardados en la carpeta “wp-content/plugins”, mientras que functions.php se guarda dentro de la carpeta de cada theme. Por ejemplo: “wp-content/themes/mytheme/functions.php”

Los plugins solo se ejecutan al ser activados individualmente desde el area de administración. Esto es una gran ventaja, ya que nos permite probar cosas y, si no funcionan, simplemente desactivamos el plugin. En cambio, el archivo de funciones del tema se activa automáticamente al activar el propio theme que lo contiene. Cualquier código que pongamos ahí, se activará inmediatamente. Para desactivar alguna función habrá que eliminar el código o comentarlo.

La funcionalidad de los plugins se aplica a todos los themes que instalemos. Si cambiamos el diseño de nuestra web con otro tema, la funcionalidad del plugin seguirá teniendo efecto, mientras que si utilizamos el archivo ‘functions.php’, la funcionalidad desaparecerá al cambiar de diseño. En otras palabras, ‘functions.php’ solo afecta al tema activo. Si cambiamos a otro tema, sus funciones se desactivarán automáticamente.

Los plugins suelen estar programados para realizar tareas concretas (por ejemplo, hacer copias de seguridad, cambiar los títulos de las entradas, etc.), en cambio el archivo de funciones del theme puede alojar todo tipo de funciones con propósitos muy diferentes (por ejemplo, cambiar la palabra “protected”, modificar los resúmenes automáticos, activar las imágenes destacadas, activar la gestión nativa de menús, etc.)

Dada la facilidad con que WordPress permite ampliar y modificar sus funciones y comportamiento, es muy fácil también generar algún conflicto entre un plugin y las funciones que incluyamos en nuestro theme. Por ejemplo, si redefinimos mal una función o un filtro que ya existe, los resultados pueden ser bastante serios (bloques que desaparecen, avisos de errores o incluso que la web deje de funcionar por completo).

Cuando trabajamos con código que no hemos creado nosotros mismos, una ventaja importante de que sea en forma de plugin en vez de pegado directamente en functions.php son las actualizaciones. Los plugins se conectan periódicamente a un servidor central para comprobar si estamos utilizando la versión más actual, mientras que el código que añadimos en el archivo de funciones de nuestro tema en este sentido es más estático, no está supervisado más que por nosotros mismos.

Functions.php y los child themes

Un child theme (temas hijos, dependientes de una plantilla padre o superior) puede tener su propio archivo de funciones para ampliar o sustituir las funciones del tema padre. Es decir, al utilizar un tema dependiente de otro estaremos cargando dos archivos ‘functions.php’: el del tema superior y el del que está subordinado a éste (child theme).

Si el tema hijo no cuenta con este archivo (es opcional), lo podemos añadir manualmente. Más abajo puedes descargar uno vacío en la sección Recursos.

Es importante entender que el functions.php de un tema hijo no sustituye al del tema padre. Si los dos tienen este archivo, primero se carga el del hijo y después el del padre. Así se puede actualizar un tema y al mismo tiempo conservar las funciones personalizadas que uno ha creado.

Conviene que las funciones incluídas en functions.php del tema hijo vayan siempre englobadas dentro de un condicional con function_exists, para evitar duplicaciones:

/* 
 * Activamos la siguiente función 
 * sólo si no ha sido definida anteriormente
 */
if ( !function_exist() ) :

	function nombre_de_mi_funcion() { 
		
	}

endif;

Con esto nos aseguramos de que la función no ha sido ya definida anteriormente y evitamos errores comunes como este:

Fatal error: Cannot redeclare [nombre de la función] (previously declared in /ruta/functions/padre/) in /ruta/functions/hijo/ on line…

Ejemplos de funciones que podemos añadir en functions.php

Internet está lleno de tutoriales y ejemplos que nos ayudan a modificar casi cualquier cosa de WordPress. Hay tantas cosas que se pueden personalizar que lo suyo es hacer una búsqueda directamente sobre lo que necesitamos. De todas formas, como ejemplo de funciones frecuentes, el archivo functions.php se puede utilizar para:

Recursos útiles: enlaces y descargas

Functions File Explained
Información oficial sobre el archivo functions.php en el WordPress Codex.

WPFunction.Me
Fragmentos de ejemplo variados organizados por tipo de función: apariencia, funcionalidad, imágenes, rendimiento y seguridad. Desde esta web podemos seleccionar los fragmentos de código que necesitamos y generar un archivo functions.php a medida:

Comentarios

  1. Victor Vallovera

    Buenas, excelente tema. Ahora quisiera saber sobre la modificación de themes, en gral. son realizados casi en su totalidad, esto llevaría a ser cancelada la functions.php y caería la pagina? O si tuviera algún archivo oculto como algo igual a pressTrends? Sinceramente yo he modificado algún que otro tema pero no se hasta donde estoy mal. Gracias!

  2. Daniel

    El archivo functions.php no es necesario para que un theme funcione, o sea que si no está, no dejaría la web inaccesible, ni nada parecido.

    Lo que sí puede afectar, y mucho, es cuando está mal formado o contiene errores.

  3. Gon

    Hola, he leído mucho sobre las funciones y trozos de código que podemos incorporar en function.php .. pero en ningún sitio explican como utilizar esas funciones, me refiero a como puedo llamar a una función que he añadido desde una Pagina o desde un Post.

    Gracias

  4. Daniel

    Hola Gon. Tienes razón. Acabo de ampliar el artículo con una sección en la que se explica cómo crear funciones personalizadas y después llamarlas desde cualquier plantilla:

    http://www.danielnabil.com/blog/que-es-archivo-functions-php-temas-wordpress/#funciones

  5. Hola Daniel! Estoy empezando con mi blog y esta publicación es la mejor que he encontrado acerca de la edición del archivo functions. Estoy tratando de cambiar el “Read more” de mi página principal, algo que en teoría es bastante simple pero no consigo ningún resultado. He editado el archivo completando las líneas de código que ya venían en mi plantilla, de tal modo que quedan así:

    // Change Excerpt More
    add_filter('excerpt_more', 'themezee_excerpt_more');
    function themezee_excerpt_more($more) {
        return 'Leer más';
    }
    

    Pero a pesar de ello no funciona tras volverlo a subir. Tampoco encuentro en el archivo ningún “Read more” que pueda sustituir y he probado a incluir trozos de código que circulan por ahí, con el mismo (nulo) resultado. La verdad es que no sé qué hago mal y he pensado que quizás se te podía ocurrir cuál es mi error.

    Mil gracias y perdona la parrafada!

  6. Daniel

    Hola María Eugenia!
    Ese código debería funcionar siempre y cuando se utilice “the_excerpt” en las plantillas para mostrar los resúmenes y éstos sean automáticos (o sea, que no tengas contenido en el campo “Extracto”).

    En otras palabras, si “Extracto” tiene contenido, éste sustituye al resumen automático y por tanto no sale el link de “Leer más” personalizado, o sale lo que haya en ese bloque.

    Otra posibilidad es que en el theme que utilizas, el texto de “Read more” se añada así:

    <?php the_content('Read more') ?>
    

    En este caso no le afectaría el código que tienes. Para cambiarlo tendrías que ir a la plantilla correspondiente (index, archive, etc.) y sustituirlo ahí mismo, o bien desde el archivo de traducciones.

  7. Daniel VP

    Saludos, soy relativamente nuevo en esto de wordpress (3 meses) mi tema hijo no tiene la opción de “functions.php” solo veo “cabecera.php”, “pie de página.php” y “hoja de estilos.css” en el tema padre si aparece “functions.php” pero lo correcto seria modificarlo desde el tema hijo? Oh estoy equivocado? Si lo que pienso es correcto como agrego “functions.php” a mi tema hijo entonces?

  8. Daniel

    Si el child theme (tema hijo) no tiene archivo “functions.php”, puedes añadirlo manualmente. Desde aquí arriba, en el artículo, puedes descargar uno vacío en la sección “Recursos…”

    El archivo “functions.php” de un tema hijo no sustituye al del tema padre. Si los dos tienen este archivo, primero se carga el del hijo y después el del padre. Así se puede actualizar un tema y al mismo tiempo conservar las funciones personalizadas que uno ha creado.

  9. oliverosM

    Muy buen post. Felicidades.
    Solo quería decir o mas bien comentar que al momento de agregar contenido al functions.php del hijo, deben de asegurarse que no sean funciones que ya vengan incluidas en el functions.php del tema padre ya que esto dará un error. Porque como dijo Daniel, el archivo del hijo no sustituye al del padre y no acepta codigo repetido…

  10. Daniel

    Muchas gracias por el apunte! Acabo de ampliar el artículo con esta aclaración sobre funciones duplicadas en temas hijos.

  11. Daniel

    Hola. Ante todo gracias por la información. Está muy completo!

    Como soy relativamente nuevo en este tema no me doy cuenta de donde debería poner el llamado a una función para ocultar un item del menú del panel de administración.

    Si no es mucha molestia podrías darme un ejemplo.
    Gracias.

  12. Daniel

    Hola Daniel.
    La puedes añadir en functions.php. Por ejemplo, aquí tienes una función que elimina el enlace a la página de plugins. No es necesario hacer nada más.

    Lo que hace que se active es la última linea (add_action), que añade la nueva función a la acción “admin_menu”:

    // -----------------------------------------------
    // Eliminar elementos del menu de administración
    // -----------------------------------------------
    function eliminar_del_menu() {
    	// Suprimimos el enlace a la página de Plugins
    	remove_menu_page( 'plugins.php' );
    }
    add_action( 'admin_menu', 'eliminar_del_menu' );
    
  13. Daniel

    Gracias por la explicación. Funciona a la perfección :-)

    Saludos !

  14. Javi

    Hola, no se si puedes echarme una mano. He modificado el functions.php para modificar la URL del Blog. Pero me he equivocado en una letra al introducir la nueva dirección y no he eliminado las filas una vez hecho. El resultado es que ahora no puedo acceder a administrar mi blog ni nada con lo que no puedo corregir los errores ni hacer nada. sabes que puedo hacer? o algun compañero sabe?

  15. Daniel

    Hola Javi.
    Puedes acceder a los archivos a través de FTP.

  16. Jorge Chía

    Tengo el menú duplicado en mi sitio web y necesito que quede uno solo. ¿Podrías indicarme cómo corregir esto? La web es http://www.corporacionpecas.org

  17. Daniel

    Hola Jorge.
    Sin ver el código que lo genera es difícil de decir. Prueba por ejemplo a desactivar los plugins que tengan algo que ver con los menús, a ver si así funciona bien.

  18. Lis

    Hola Daniel gran post.
    Soy nueva en esto de las web y no soy capaz de encontrar donde tengo instalado el tema para poder hacer alguna modificacion siguiento tus consejos, podrias ayudarme? porfa. Otra cosa tienes algun post que hable de como entrar a la web por FTP?. Gracias

  19. Daniel

    Hola Lis.
    Los temas de WordPress están en la carpeta “wp-content”, dentro de “themes”.

    Para gestionar los archivos por FTP necesitas un programa especial, por ejemplo Filezilla (gratuito): https://filezilla-project.org/

    Después, para acceder al servidor necesitas conseguir estos datos:

    – Nombre del servidor FTP (host)
    – Nombre de usuario
    – Contraseña

    Estos datos los encontrarás en el panel de control de tu proveedor de hosting.

  20. María

    Hola Daniel, en primer lugar gracias por este genial artículo.
    Tengo un problema con mi tema. He instalado un plugin Google Maps interactivo en mi web y cuando abro el site éste carga sin problemas. Sin embargo, si entro en cualquiera de las secciones y luego le doy a volver atrás a la Home (no pinchando logo), el mapa ha desaparecido.

    Me han dicho que tengo que añadir este código al script del:

    jQuery('.q_logo > a').click( function() {
         document.location = jQuery(this).attr('href');
         return false;
    });
    

    ¿Tengo que hacerlo en el archivo funtions.php?
    Gracias!

  21. Daniel

    Hola María.
    Seguramente el mapa se crea cada vez que se carga la página, por eso al volver atrás no aparece (al volver atrás el navegador suele utilizar lo que tiene almacenado localmente y no consulta con el servidor).

    Lo que hace ese código es desactivar el enlace del logo y definir uno nuevo basado en el destino de ese mismo enlace. Lo más fácil es que lo añadas al final de la página (normalmente en “footer.php”). Tal como está no lo puedes añadir en functions.php porque es Javascript (jQuery), no PHP.

    De todas formas, por lo que dices el problema no tiene nada que ver con el link del logo, o sea que no te va a solucionar nada.

  22. David

    Muy buenas, primero de nada felicitarte por este articulo es muy util, queria hacerte una pregunta a ver si me puedes ayudar por que soy nuevo en el mundillo y tengo un problema que se que debe ser una tonteria pero no logro hacerlo, mi web por defecto carga esto como puedes ver aqui http://www.productosnat.es/ pero lo que yo quiero que carge es esto http://www.productosnat.es/?page_id=16 sabrias decirme como hacer para que me carge la segunda opcion al entrar en la direccion nativa? gracias de ante mano puedas ayudarme o no.

  23. Daniel

    Hola David. Seguramente basta que cambies la configuración de página inicial en Ajustes > Lectura > Página frontal muestra… Desde ahí puedes elegir cualquier página estática para que se cargue como página de inicio.

  24. David

    Muchas gracias Dani sabia que era una tonteria pero aveces nos bloqueamos con lo mas simple, muchas gracias de verdad me valio de mucho tu ayuda.

  25. David

    lamento ser un poco pesado pero quizas me puedas ayudar en el ultimo problema que me queda por resolver, quisiera reducir el largo de mi slideshow osea el tamaño vertical para que no ocupe tanto, en la demo de mi theme es mas pequeño pero a mi siempre me lo carga asi aunque cambie el tamaño de las imagenes, sabrias por un casual como poder solucionarlo? el que viene en mi plantilla por defecto es flexslider

  26. Carla

    Hola, muchas gracias por toda la info. Quería consultarte sobre un problema que tengo, estoy trabajando sobre un template de wordpress y quiero realizar algunas modificaciones en el archivo css central (lo estoy haciendo desde filezilla) pero cuando recargo la página, los archivos se actualizan como en un principio, y no guarda ningún cambio. Esto ya lo había hecho con otros temas, y nunca tuve este problema. Podrías ayudarme? Mil gracias!

  27. Daniel

    Hola Carla. Lo más probable es que no veas los cambios porque el navegador no actualiza la hoja de estilos (cache). Para evitarlo, puedes añadir algún parámetro (fecha, versión…) al final de la URL, por ejemplo: “…/style.css?v=280115”. Así fuerzas al navegador a que recargue la hoja de estilos desde el servidor, en vez de utilizar la copia local que guarda.

    Normalmente la llamada al CSS principal se hace desde “functions.php”, aunque depende del tema que utilices. Para encontrarlo busca “style.css” o “get_stylesheet_uri” en la carpeta del tema que esté activo.

    Si la hoja de estilos se carga con “wp_enqueue_style”, puedes añadir los números sustituyendo “null” por “280115” (o cualquier otra cosa). Por ejemplo:
    wp_enqueue_style( ‘theme-styles’, get_stylesheet_uri(), false, ‘280115’, ‘all’ );

  28. Eugenio

    He añadido un nuevo shortcode personalizado para mi tema y al llamarlo desde el contenido de una página en cualquier parte de esta, me lo ejecuta y muestra al principio de los contenidos de la página, ¿por qué ocurre esto?

  29. Taco

    Genial el post! No falta ni un detalle.

    Gracias a ello he solucionado el error headers already sent, ya que había puesto la etiqueta de cierre.

    Saludos

  30. Mauricio Prada

    Hola Daniel… excelente tu blog.
    Quisiera saber si me podrías ayudar con lo siguiente: Tengo una web en WP con un menú por defecto que no permite submenú de tercer nivel.

    Descagué un plugin que me sirve pero no sé como reemplazar el menu por defecto de la plantilla por el del plugin.

    Saludos !!!

  31. miguel

    Hola Daniel:
    Estoy tratando de habilitar comentarios usando la templeta Twentyten
    ¿qué código debo cambiar?

  32. Tony

    Hola Daniel quiero modificar en la plantilla Twentyten la carpeta y etiquetas que salen al lado del post quitarlas me puedes indicar como lo puedo hacer , tambien cambiar el color del H1.
    Excelente Post .

    Un Saludo
    Tony Terren

  33. i23

    Efectivamente, no sabía muy bien lo que hacía, trate de modificar mi archivo functions.php y ahora mi pagina web aparece en blanco.
    ¿que puedo hacer?

    Muchas gracias.

  34. Daniel

    Lo mejor sería que activaras WP_DEBUG (en wp-config.php). Esto te mostrará avisos que te darán alguna pista sobre el error. De todas formas, lo más común es que falte o sobre algo: una coma, un punto y coma, una llave, etc.

  35. Montse

    Hola, tengo una duda.
    Me funciona el tema hijo, pero yo quiero personalizar un fichero.php de un plugin. Cual es la ruta correcta que debo poner dentro de mi tema hijo para que coja el fichero php modificado.

    Dentro de la carpeta mitema-hijo:
    Ej: /plugin/carpetadelplugin/templates/nombre del fichero.php?
    o /carpetadelplugin/templates/nombre del fichero.php?
    o me falta algo?

    Tengo que hacer algo en el fichero functions.php de mi tema hijo para que lo coja?
    Gracias

  36. Daniel

    Hola Montse.
    Supongo que te refieres a plugins que te permiten sustituir plantillas creando copias en la carpeta del tema (por ejemplo: WooCommerce, The Events Calendar…)

    Si es así, por ejemplo en el caso de WooCommerce funciona igual que con un tema normal:
    /wp-content/themes/tema-hijo/woocommerce/plantilla.php

  37. Antonio

    Hola, mi duda es la siguiente, se pueden insertar plugins en un tema de pago, estoy interesado en ignitiondeck para la creacion de una pagina web de crowdfunding, y queria insertar algunas cosas del tema comprado, es posible?

    Gracias

  38. Nancy Ocampo

    Hola que tal, creo que he modificado el function.php o header y ahora encima del menu de mi pagina me aparece un cuadro pequeño cargando de nuevo la pagina. No se como quitarlo, podrias ayudarme??

  39. Alvaro

    Ayuda, estoy tratando de instalar mi pagina web en mi lap, ya tengo coto instalado y configurado, ya hice la exportación de la base de datos pero todos los archivos en que carpeta se colocan. Por FTP ya intente y marca error de conexion.

    Quiero hacerlo primero aquí antes de hacerlo en el hosting que compete.
    Gracias.

  40. Antonio

    Daniel, muy util tu articulo. Yo quisiera saber como modificar functions.php para habilitar los widgets en el sidebar en un theme que disponga de estos.

  41. Antonio

    Para Alvaro, has cambiado los datos de la base de datos: usuario, host, contraseña, nombre base de datos.

  42. Nacho

    Hola, Daniel! Felicitaciones por tu artículo, es excelente. A ver si me puedes ayudar con esto. Tuve un problema con mi sitio y tuve que salvar datos y bases, cerrar la cuenta, volver a abrirla y restaurar la copia de seguridad. Al hacerlo, modifico el wp-config para la nueva base de datos, pero al entrar a mi dominio me sale esto:

    Warning: file_exists(): open_basedir restriction in effect. File(/home/u428946921/public_html/wp-content/uploads/2015/08) is not within the allowed path(s): (/home/u801764429:/tmp:/var/tmp:/opt/php-5.5/pear) in /home/u801764429/public_html/wp-includes/functions.php on line 1496

    Warning: is_dir(): open_basedir restriction in effect. File(/home/u428946921/public_html/wp-content/uploads/2015) is not within the allowed path(s): (/home/u801764429:/tmp:/var/tmp:/opt/php-5.5/pear) in /home/u801764429/public_html/wp-includes/functions.php on line 1501

    Fatal error: Maximum execution time of 30 seconds exceeded in /home/u801764429/public_html/wp-includes/functions.php on line 1501

    Que puede ser? Perdí todo mi trabajo? Gracias por tu ayuda anticipadamente!

  43. Danny

    Buenas estoy buscando informacion de como pasar un pluggin a function, si alguien me puede recomendar un lugar a visitar donde hablen mas de este tema estaria agresido

  44. daniel azcui

    Tengo este error. Me puedes ayudar?
    wp-content/themes/betheme/functions.php on line 131
    Gracias.

  45. Alex

    Buenas Tardes. Tengo un problema con un theme de wordpress, el cual incluye integrado un slider que es imposible eliminar. Está junto al panel de opciones en página nueva e integrado en el menú de wordpress. Quisiera poder eliminarlo para poder instalar el plugin Revolutionslider (o cualquier otro) pues al instalar cualquier plugin de slider me bloquea el plugin y sólo hace caso al slider integrado por defecto.
    Muchísimas gracias de antemano.

  46. Javier

    Buenos días,

    Tengo un problema y es que tengo un agregador de RSS que por defecto copia toda la entrada en el extracto.

    ¿ Hay alguna manera de deshabilitar el extracto en un thema determinado?.

    He probado a limitar el número de palabras del extracto pero no funciona.

  47. Buen artículo… FELICITACIONES
    Tengo un problemom con mi dasboard de WP… Es que una persona me ha configurado y me ha bloqueado la opcion de Apariencia, Plugins y Ajustes, por lo tanto no tengo más acceso a estas funciones de WP. Aqui te dejo una captura de pantalla http://prntscr.com/8s0ht0
    Podrias darme algunas recomendaciones de como solucionar?
    Mil gracias

  48. Carlos Jiménez

    Hola daniel, me preguntaba si se podrá también añadir un reproductor de vídeos a mi pagina con el archivo function, mi web es de vídeos solamente, lo que hago actualmente es copiar el código embed de otros sitios y se reproducen pero con el reproductor de ese sitio , pero por consiguiente me sale la publicidad de esas paginas, y quisiera saber si puedo crear uno personalizado con el archivo function, quisiera que reproduzca los vídeos tanto en computadoras como en dispositivos como celulares y tabletas.
    Pero en caso de que no fuera posible hacer eso, donde podría comprar un reproductor que sea una pagina confiable.
    Gracias de antemano, saludos.

  49. Gustavo

    Hola, queria saber que archivo debo editar y que tengo que ponerle al archivo porque tengo un plugin que se me actualiza solo y me deja de funcionar. El plugin es Instabuilder 2.07. Lo que quiero es que mi plugin no se actualice automaticamente. Queria saber si hay algun codigo que pueda colocar en algun fichero para evitar esa actualizacion. Muchas gracias.

  50. Guillem

    Hola Daniel

    He usado una plantilla de wordpress y en la sección “Porque mr.apps” hay unos círculos que dentro solo permite poner un porcentaje y por lo tanto solo números del o al 100 y quiero poder poner el numero que quiera.

    He probado de mirar y cambiar algunas cosas en los archivos customize.php y functions.php (en este ultimo no encuentro nada de esa sección) pero no consigo dar con la tecla exacta.

    La web es http://www.mrapps.es

    Muchas gracias por tu ayuda!

  51. Jose Manuel

    Hola… Muy bueno el artículo y se agradece, pero he modificado functions.php y ahora mi web no se ve y tampoco puedo acceder al escritorio ni nada…
    Accedo por ftp y eliminé la modificación que hice al archivo dejándolo exactamente igual a su estado original antes de modificarlo… Lo guardo esperando que aparezca nuevamente mi web y nada. Estoy muy complicado ¿Me puedes ayudar por favor?

  52. Daniel

    Hola Jose Manuel.
    Para saber si el problema está en el archivo functions.php, puedes probar instalando otro tema. De todas formas, en estos casos conviene tener activada la función WP_DEBUG (en wp-config.php) para ver el mensaje de error y poder corregirlo.

  53. Rut

    Muchas gracias! información muy valiosa.

  54. Martin

    Holaaa buenas noches, necesito crear un archivo .php en la pagina web, pero no tengo acceso a los archivos (/wp-content) como hago en ese caso? gracias

  55. Daniel

    Si tienes acceso como administrador y no se ha bloqueado la función de editar el código, puedes acceder a los archivos PHP que forman la plantilla desde Apariencia > Editor.

  56. Angel Daniel

    Estimado Daniel, dos preguntas:

    A. Por favor, como puedo hacer que el enlace del nombre de autor sea redirigido a cualquier página que yo realice y no necesesariamente al contenedor de entradas del blog de un determinado autor?

    B. Como se puede personalizar la tipografia en las entradas?

    Por tu atención, de antemano de agradezco.

  57. Daniel

    Hola Angel.

    A. Si puedes editar las plantillas de tu tema, puedes cambiar esos enlaces a las entradas del autor por cualquier otra dirección (normalmente en single.php, content-single.php, archive.php, etc). Se puede, por ejemplo, utilizar la función the_author_link() para incluir un enlace definido en el perfil de cada autor.

    B. La tipografía forma parte de los estilos de la web, es decir que todos los ajustes (tipo, tamaño, color, interlineado…) estarán en “style.css” u hojas de estilo similares. Para añadir tipografías diferentes, la manera más sencilla suele ser utilizar Google Fonts: https://fonts.google.com/

  58. Ana

    Estimado Daniel,

    Intentando incrustar el código de analytics en el header.php de mi wordpress, al actualizar se ha borrado todo el código contenido. ¿Cómo puedo recuperarlo?

Y tú qué opinas?

Las URLs se convertirán en enlaces automáticamente. Tu dirección de email no se publicará ni se utilizará para enviar ningún tipo de información. Los mensajes que no aporten nada al tema que se trata en esta entrada se borrarán. Las imágenes que aparecen al lado de cada autor utilizan el servicio de Gravatar. Recuerda que puedes usar etiquetas HTML como <a href>, <code>, <em> o <strong> en los comentarios.

(necesario)

(opcional)