¿Recuerdas cuando eras más pequeño y tus padres o educadores te decían eso de "niñ@ no metas los dedos en el enchufeee" y tu hacias caso omiso? hasta que zassss!!! corrientazo que te llevaste y ese día aprendiste que la prudencia es la madre de todas las ciencias. Al final a cacharrazos también se aprende, jeje!!
No has sentido un susurro por lo bajito, en tu oído derecho que decía "no toques el archivo functions.php en WordPress, que la vas a liar parda..." y tú naturalmente has ignorado el aviso hasta que te has dado de narices con un error 500 o una hermosa pantalla blanca en tu web.
Al final el problema llega y casi siempre por no haber tomado las medidas preventivas habituales, como hacer una copia de seguridad con XCloner o el plugin de tu fervor, o más simple aún, cacharrear primero dentro de una sandbox en WordPress para verificar que todo ira bien, ¿verdad que no lo hiciste?
Y ahora toca arrepentirte del desastre y ponerte manos a la obra para solucionar este desaguisado antes de que tus visitas se resientan en tu web, caigan las ventas o tu jefe se de cuenta...
¡Venga vamos a solucionar este gazapo causado en functions.php!
¿Que es functions.php?
Aparte de ser un archivo, a veces suele también ser una pesadilla para algunos usuarios, sobre todo cuando las cosas se tuercen por añadir código incorrecto o no soportado en este archivo.
Pero más allá de esto, functions.php es el archivo de funciones de tema de WordPress en uso. Cada tema tiene su propio archivo functions.php y este actúa como un plugin tanto para el dashboard de WordPress como para el frontal.
Permite añadir código que amplíe las funcionalidades al tema en uso y a la instalación de WordPress de forma general.
Permite añadir ganchos, filtros, funciones PHP y de WordPress. Los temas hijo (child-theme) también pueden tener su propio archivo functions.php si necesitas ampliar funcionalidades al margen del tema padre.
Además puedes añadir mediante acciones el código de Google Analytics, declarar cuál será y donde se encuentra en favicon de tu sitio web, ocultar el número de versión de WordPress (para evitar la enumeración), añadir un logo personalizado mediante una función y un sinfín de posibilidades que a poco que escarbes en Internet vas a encontrar, por lo que llegado a este punto cabe recordarte de nuevo que la precaución es la mejor de las medidas a tomar en el uso de este archivo.
Errores de todos los tamaños y colores
Cuando el código insertado en functions.php es correcto, nada malo debe suceder y el comportamiento del sitio y/o del tema será el esperado. Pero si por el contrario añades código erróneo, no soportado o con una sintaxis incorrecta, podrás encontrarte en pantalla, en tu archivo error_log o en el debug cosas como estas:
Un error parse no es más que una indicación de que algo está mal escrito o falta. Puede ser, desde uso de etiquetas de PHP incorrectas, algún símbolo de cierre como corchetes } o paréntesis ) o una simple coma ,
Revisa la línea del error y observa que puede estar faltando, posiblemente sea un error fácil de resolver que te puede ahorrar un mal rato y tener que restaurar una copia de seguridad anterior al problema.
Otro clásico error de escritura o de copy-paste de código de otros sitios web. En este error indica que falta un corchete { de apertura en la línea 20 del archivo.
Caben varias conjeturas en la causa de este error, pero yo me decantaría por que has editado el archivo functions.php incorrecto o algún problema con una versión desactualizada del tema ¿se te ocurre alguna a ti?
Al final solo quería ilustrarte un poco lo que puede provocar el meterle mano a functions.php sin tener claro el cómo y con qué código.
No te voy a discutir que si algo lo puedes hacer con una función, un gancho o un filtro, hazlo, siempre será mejor que instalar un plugin.
¡Vale! la he liado con functions.php ¿cómo lo arreglo?
Reconocido el error, ya has dado el primer paso, ahora toca ver qué opciones tienes. A mi se me ocurren varias.
Recuperando una copia de functions.php desde Dropbox
Si haces copias automáticas diarias en Dropbox o Google Drive de tu instalación de WordPress, ve y descarga el archivo functions.php de la última copia y súbelo de nuevo al Hosting en sustitución del actual fichero con errores.
Esto lo puedes hacer desde tu cPanel, Archivos, Administrador de Archivos o por FTP.
Puedes eliminar el archivo functions.php erróneo o renombrarlo, por ejemplo a functions.php_OLD para no perderlo pero que no interfiera con tu instalación de WordPress.
A continuación sube a esta carpeta el archivo functions.php que has descargado de tu copia de seguridad diaria almacenada en Dropbox.
Para finalmente tener el archivo functions.php rescatado de la copia de seguridad y que tu web vuelva a ser operativa.
Madre mía ¡pero cómo puede ser tan simple! :)
Personalmente este para mi es uno de los métodos más recomendados, por inmediatez, sobre todo porque las copias se realizan todos los días y se que a lo largo del día, si me cepillo algún archivo o hago cambios y luego no puedo dar marcha atrás, soy consciente de que en Dropbox encontraré una versión del archivo eliminado o modificado, de las últimas 24 horas.
Puedes leer en el artículo del Blog como programar las copias de seguridad de WordPress hacia Dropbox de manera desatendida.
En este vídeo te explico lo sencillo y rápido que puede ser restaurar el archivo functions.php desde una copia de seguridad que realices automáticamente cada día en Dropbox.
Recuperando una copia de functions.php desde cPremote Backup Management
Si todavía eres de los que no usa la nube (Dropbox, Drive, etc.) para almacenar automáticamente copias de seguridad diarias, no sabes lo que te estás perdiendo, tu mismo. No obstante, si eres cliente de Webempresa ¡estás salvado! ya que diariamente se hacen copias de seguridad (además de otras copias), y es precisamente la copia de seguridad diaria la que te puede salvar si la lías con functions.php
Recuerda que lo recomendable es que desde tu cPanel, Archivos, Administrador de Archivos, renombres primero el archivo functions.php problemático (si no pudiste resolver el problema editándolo) para luego restaurar una copia desde tu cPanel, Archivos, cPremote Backup Management utilizando la opción Restore File/Directory.
Pasos para restaurar functions.php desde cPremote:
- Accede a tu cPanel, Archivos, cPremote Backup Management.
- Dentro de esta herramienta hay una opción llamada Restore File/Directory.
- En el primer campo debes poner un correo electrónico para recibir la notificación una vez se restaure el archivo (a veces tarda de 5 a 10 minutos en ser restaurado si es un solo archivo, depende de la carga del servidor).
- En el segundo campo debes escribir literalmente lo siguiente: public_html/wp-content/themes/tu-carpeta_del-tema-en-uso/functions.php. (1)
- Luego debes seleccionar la fecha de restauración de las disponibles: daily (diaria), weekly (semanal), moothly (mensual).
- Haz clic en el botón Restore
- Espera a recibir el correo de notificación de tarea concluida.
(1): Observa que empieza como public_html sin slat o barra inclinada / al principio ¡ojo! porque si no te fallará la restauración.
Hecho esto tu archivo functions.php debería haberse restaurado y tu web tendría que volver a funcionar con normalidad.
El funcionamiento más detallado de Restore File/Directory te lo explico en el artículo del Blog: Restaura archivos o carpetas con cPremote Backup Management en cPanel.
Hay muchas más formas de restaurar functions.php después de haberla liado, pero creo que solo van a contribuir a aumentar el número de palabras de este artículo y no necesariamente van a sustituir a estas dos excelentes opciones que te he planteado para restaurar este archivo cuando surgen los problemas.
Es importante que sepas que por un error en functions.php no es necesario restaurar una copia de seguridad completa del sitio web, es una pérdida de tiempo importante por tu parte que puedes evitar haciendo copias de seguridad programadas diarias y trabajando en una 'sandbox' para hacer pruebas antes de que tu web deje de ser visible.