Creo que ya lo he comentado en alguna ocasión anterior, pero una de las cosas que más me gusta de WordPress es la facilidad con la que se puede personalizar. ¿Quieres cambiar el logo que aparece en la pantalla de login? Puedes hacerlo. ¿Quieres que las sesiones de tus usuarios caduquen antes y tengan que volver a iniciar sesión? Es fácil con este plugin. ¿Quieres <pon aquí lo que necesites>? ¡Probablemente también puedas!

Con la cantidad de plugins que tiene WordPress (más de 42,000), es fácil imaginar que prácticamente cualquier necesidad que tengas estará cubierta por alguno de ellos (y, sino, siempre puedes contratar a algún WProfesional 😉). Y si echas un vistazo por la web, en seguida encontrarás un montón de entradas dando consejos y trucos para conseguir personalizar tu web hasta el más mínimo detalle.

Sin embargo, la verdad es que los plugins no siempre son la mejor solución para conseguir el efecto deseado. Y es que tener muchos instalados puede reducir la velocidad de tu WordPress y afectar negativamente a la experiencia de usuario de tus visitantes. Además, una mayor cantidad de plugins también implica tener que dedicar más tiempo a actualizarlos

Así pues, ¿qué puedes hacer si quieres tener un mayor control de tu WordPress, quieres poder usar plugins, pero te gustaría poder ahorrarte estas desventajas? En la entrada de hoy te enseño cómo puedes personalizar algunos parámetros de WordPress (tanto del escritorio como del front-end público) usando unas pocas líneas de código.

Personalizando el Escritorio de WordPress

Cambia el Logo en la pantalla de login

Vamos a empezar con algo sencillito pero bastante importante para tu imagen personal (o la de tu empresa): usar tu logo en la pantalla de login. Simplemente, añade el siguiente código en el fichero functions.php de tu tema:

Fíjate en un par de detalles importantes del código anterior, los cuales se van a ir repitiendo en (casi) todos los ejemplos de hoy:

  • Todos los fragmentos de código que comparto empiezan en <?php. Cuando vayas a pegar el fragmento de código en tu instalación de WordPress es posible que esta directiva no la necesites; lo único que indica eso es que el código que viene a continuación es PHP. Si no tienes claro si ponerlo o no, pregunta en los comentarios 😊
  • Las modificaciones consisten en una función (en este caso, wprin_my_logo_on_login) y un filtro o acción que usa esa función (add_action a login_head).
  • Las funciones empiezan con un prefijo común (wprin_, de nuestro WPrincipiante) para evitar que nuestros nombres de función coincidan con los nombres de función de otros plugins o del tema, ya que las funciones deben ser únicas (o saltaría un error).
  • El código contiene comentarios. Estos son muy importantes, pues te ayudarán a recordar qué hacía una función en concreto cuando la mires el año que viene y te preguntes “¿Para qué metería yo esto aquí?
  • Los nombres de las funciones y las variables están en inglés. Escribir el código en inglés en una plataforma como WordPress facilita que otros desarrolladores puedan meterle mano, extenderlo o ayudarte cuando lo necesites. De hecho, incluso los comentarios deberían estar en inglés 😉

Modifica la duración de las sesiones

Si sueles conectarte al escritorio de tu WordPress desde redes WiFi públicas o desde ordenadores de acceso compartido (por ejemplo, en la universidad o en el trabajo), es muy importante que no te olvides de cerrar tu sesión al acabar. Si no lo hicieras, el que viniera después de ti y se sentara en tu ordenador podría meterle mano a tu WordPress (por cierto, este es otro de los motivos por los cuales aconsejamos usar el usuario de administración para administrar únicamente el site, y un editor o autor para publicar).

WordPress te permite modificar la duración de tu sesión. Es decir, si hace más de x tiempo que iniciaste la sesión, ésta caducará automáticamente y te obligará a volver a introducir tu usuario y contraseña. Por ejemplo, si nunca entras en el escritorio de WordPress desde lugares públicos y únicamente lo haces desde casa, ¿por qué no extiendes la duración de la sesión? Añade el siguiente código en el functions.php de tu tema y tendrás “siempre” la sesión lista para trabajar sin que WordPress te eche:

Si no me equivoco, una sesión en WordPress dura, por defecto, hasta dos semanas (suponiendo que le diste a la casilla Recuérdame). En el ejemplo extiendo esa duración a un año en segundos, pero puedes usar el tiempo que te interese. Simplemente piensa en tus necesidades y establece una duración que se adapte a ellas.

Cambia el pie de página

Otro ejemplo donde la imagen corporativa puede ser importante. Si quieres dar un toque más “personal” al escritorio de WordPress, ¿por qué no modificas también el texto que aparece en el pie de página? Con el siguiente fragmento de código en, de nuevo, el fichero functions.php podrás usar el lema de tu empresa (o lo que sea) en tu WordPress:

Modificar el número de revisiones por entrada

Por si no lo sabías, WordPress va guardando “versiones” de las entradas que escribes; es una especie de time machine de tu contenido. Esta funcionalidad es genial, puesto que te permite recuperar el texto de versiones anteriores fácilmente y ver los cambios que hubo entre dos versiones cualesquiera.

Por defecto, WordPress guarda un número ilimitado de versiones, cosa que puede llegar a ocupar “bastante” en tu base de datos. Si quieres limitar ese número, bastará con que añadas la siguiente línea en el fichero wp-config.php (en la raíz de tu instalación WordPress):

Modificar el intervalo de auto-guardado

De forma parecida, también puedes modificar el intervalo en que WordPress guarda de forma automática lo que escribes. Ah, ¿no lo sabías? Pues sí, amigo, así es: WordPress va guardando cada cierto ratito lo que has escrito para protegerte de desastres como que te pete el navegador y no hayas guardado manualmente tu entrada. Con esta línea en wp-config.php puedes modificar el intervalo de auto-guardado:

Puedes encontrar más configuraciones avanzadas para tu WordPress modificando el archivo wp-config.php en este artículo.

Personalizando el front-end

Retrasar la aparición de entradas en el canal RSS

Imagina la siguiente situación: acabas de escribir una entrada, la publicas y, al rato, te das cuenta de que hay una falta de ortografía en el título. ¡Qué desastre! En ese rato, es posible que los lectores de RSS de tus visitantes ya hayan actualizado su lista de noticias y hayan indexado tu entrada con la falta de ortografía. ¡Vaya! Ojalá hubieras tenido un poquito más de tiempo para repasar tu entrada…

Este pequeño fragmento de código permite hacer precisamente eso. Las entradas que aparecen en tu canal de RSS se seleccionan a través de un loop de WordPress y, como puedes imaginar, tienes la posibilidad de meterle mano a ese loop y modificarlo a tu antojo para que sólo aparezcan las entradas que a ti te interesan.

¿Qué hace este “pequeño” código? Básicamente, comprueba que la selección de entradas que se está haciendo sirve para generar el canal de RSS (is_feed() en la línea 14) y, si lo es, añade una condición: incluye sólo aquellas entradas que lleven, como mínimo, 60 minutos publicadas. Fácil, ¿no?

Excluir las páginas de los resultados de una búsqueda

Otro ejemplo sobre cómo modificar los resultados que va a devolver WordPress dado un cierto evento. En este caso, por ejemplo, nos interesa que los usuarios que realicen búsquedas en nuestra página web encuentren como resultado únicamente las entradas de nuestro blog. No obstante, WordPress, por defecto, también muestra como resultados las páginas de nuestra web que (cree) están relacionadas con la búsqueda que se ha hecho.

Con este pequeño fragmento de código en el fichero functions.php, WordPress devolverá únicamente entradas (post_type tiene que ser post; es decir, no va a ser page):

¿Dónde meter las personalizaciones que hemos visto?

Salvo los dos ejemplos con sentencias define, las cuales hay que meter en wp-config.php, todos los hacks que hemos visto hay que meterlos en el fichero functions.php de tu tema. Pero, ¿por qué allí y no en otro lado? ¿Sólo puedes añadir código personalizado en ese fichero?

La verdad es que siempre que veas tutoriales en los que te recomienden meter código en el functions.php tienes que tener en cuenta que es por comodidad. Prácticamente todos los temas de WordPress incluyen ese fichero, así que si quiero asegurarme de que un wprincipiante cualquiera sepa dónde y cómo meter código en su instalación de WordPress, lo más sencillo es indicarle un fichero que pueda encontrar fácilmente.

No obstante, hay que tener en cuenta que el fichero functions.php no es siempre la mejor opción. Para empezar, cada vez que tu tema se actualice, también lo hará el fichero en cuestión, con lo cual se perderán todos los cambios. Para evitar esto deberías crear un tema hijo y meter las personalizaciones en el functions.php del hijo… pero, claro, eso ya no es tan sencillo. Además, si actualizaras el tema hijo (tampoco es tan raro cuando se usan temas framework) volverías a estar en las mismas.

Entonces, ¿cuál es la mejor solución?

Implementando un plugin con todas las funcionalidades

En mi opinión, lo más sencillo es implementar un pequeño plugin donde meter todas las funcionalidades que quieras. Ya sé que he empezado la entrada diciendo que “no es bueno tener demasiados plugins”, pero fíjate que en este caso tendrías únicamente uno, el cual contendría todas tus personalizaciones (en lugar de un plugin por funcionalidad).

Crear un plugin es más sencillo de lo que crees. Para el caso que nos ocupa, bastará con que crees un fichero llamado, por ejemplo, mis-funciones-personales.php con el siguiente contenido:

¡Y ya está! Ya tienes tu primer plugin… que no hace nada. A partir de la línea 11, ve añadiendo los fragmentos de código que hemos visto en la entrada de hoy, mete el fichero en el directorio wp-content/plugins, activa el plugin y, ahora sí, ya podrás usar estas personalizaciones en tu WordPress.

Actualización 19 de febrero. En uno de los comentarios, @CybMeta comparte otra entrada muy interesante donde explica, con un poco más de detalle, por qué deberías usar plugins en lugar de editar directamente el fichero functions.php. ¡Te recomiendo que le eches un vistazo!

Resumiendo

WordPress es una herramienta que puede personalizarse hasta el más mínimo detalle. La forma habitual de hacerlo es a través de los plugins que encontrarás en el repositorio oficial de WordPress. No obstante, instalar muchos plugins para realizar pequeños cambios no siempre es aconsejable. Para pequeñas modificaciones, bastará con que añadas tú mismo la funcionalidad que te interese en el fichero functions.php de tu tema o, aún mejor, crees un único plugin donde meter todas tus personalizaciones.

Imagen de Emyr Jones.

11 Comentarios

  1. Hola!
    Muy bueno este articulo, hace rato que estoy buscando algo asi.
    No obstante, al final y despues de dar mil vueltas, he decidido implementar el framework genesis en mi sitio y ahora estoy tratando de adecuarlo, que no es simple.
    Gracias y hasta pronto.

  2. Jejeje … ya iba a decir que no se debería recomendar poner en functions.php de un theme funcionalidades que nada tienen que ver con el propósito de un theme. Menos mal que antes de darle a enviar he leído hasta el final!!! Jejejeje

    • ¡Buenos días!

      Efectivamente, meter funcionalidades que no están relacionadas con el tema en el fichero functions.php no es una buena práctica. No obstante, estarás conmigo en que, por suerte o por desgracia, la mayoría de tutoriales y consejos que encuentras por internet indican a los usuarios meter sus snippets en ese fichero… En mi entrada, he preferido seguir el estilo de la mayoría de gente (es decir, mencionar la posibilidad de meter las cosas en functions.php) y, a continuación, explicar por qué no es la mejor idea hacerlo y qué alternativa habría. Me parecía más didáctico 😉

      En cualquier caso, gracias por tu aportación y por confirmar a nuestros lectores que “las cosas que metes en el tema, deberían estar relacionadas con el tema”.

      Un saludo,
      David

  3. Hola David, muy interesante el artículo. Gracias por enseñarnos a personalizar mejor nuestro WP. Ahora tengo una duda: en el plugin que personalizamos también se pueden añadir los “define” o éstos tienen que ir obligatoriamente en el fichero wp-config.php. Y disculpa mi ignorancia pero, en caso de que tengan que ir en el wp-config.php, no sé si este fichero se modifica cuando actualizas tu theme y luego hay que volver a introducir el código personalizado. Yo creo que este fichero no tiene nada que ver con el theme y, por tanto, no hay que hacer nada tras actualizarlo, pero no estoy seguro del todo. Confírmamelo, please.
    Muchas gracias.

    • ¡Hola!

      Gracias, me alegra saber que te ha gustado la entrada 🙂

      En el plugin que personalizamos también se pueden añadir los “define” o éstos tienen que ir obligatoriamente en el fichero wp-config.php

      En este caso, las directivas define tienen que ir obligatoriamente en wp-config.php, ya que se tratan de parámetros de configuración del propio WordPress.

      (…) no sé si este fichero se modifica cuando actualizas tu theme (…) Yo creo que este fichero no tiene nada que ver con el theme

      Efectivamente, el fichero wp-config.php no tiene nada que ver con el tema. De hecho, los ficheros que pueden verse afectados por la actualización del tema son los que están dentro del propio tema; es decir, dentro de wp-content/themes/tu-tema. Por otro lado, supongo que es posible que el tema añada algún fichero fuera de su propio directorio… pero, sinceramente, si lo hiciera, no creo que estuviera muy bien hecho (sería una mala práctica).

      Un saludo,
      David

  4. Hola David:
    Te escribo para agradecerte. No quepo en mi misma de la emocion de haber creado mi primer plugin! con tu ayuda (claro!). Utilizo genesis framework desde hace tiempo y he logrado hacer modificaciones con mucha prueba de error y perdida de tiempo por desconocimiento.
    Ahora estaba queriendo meter a presion un snippet para excluir eventos de mi calendario en el formulario de busqueda. Habia encontrado el fragmento de codigo pero el functions.php colapsaba.
    Hice lo que sugeriste de crear el plugin super simple, y NO PUEDO CREER que haya funcionado!!
    Infinitas gracias y exitos! me he suscripto a tu blog.

    • Hola Brinda.

      Me alegra saber que nuestros consejos te han ayudado a solucionar tu problema. ¡Y muchísimas felicidades por haber creado tu primer plugin!

      Tal y como comento en la entrada, realizar personalizaciones en el propio tema (functions.php) puede acarrear problemas, especialmente si tenemos en cuenta que cualquier actualización de este podría cargarse nuestro trabajo. Así que, ¡bien por ti!, has hecho lo que debías 🙂

Dejar respuesta