Plugin WordPress: Mail_Me_If_Link_Broken

En una tarde he escrito este pequeño plugin para WordPress. Tenía muchas ganas de ver el sistema de plugins de WordPress, y he quedado gratamente sorprendido :-), ha sido sencillo, hay bastante documentación de funciones, y mucha información en Google de gente que los ha trabajado previamente (con Coppermine Gallery no hay tanta información).

El plugin
Su funcionalidad es muy sencilla, se me ocurrió hace tiempo, que pensé que sería útil a la hora de gestionar un sitio Web con mucha cantidad de información, tener algún sistema que te permitiera identificar los enlaces rotos. Hace cosa de unas semanas en el trabajo se me presento precisamente esta necesidad, administrando un portal con una cantidad de contenido ingente, hay muchos enlaces que están rotos (especialmente los de los contenidos más antiguos) y era necesario poner a una persona a revisar los enlaces (absurdo, porque como digo la cantidad de contenido es ingente).

Lo primero que pensé fue algún tipo de mecanismo que automatice el proceso, de manera que se conecte a la URL del enlace, y si recibe un error (tipo mensaje 404, 500, y demás) pues me enviara un mail. Pero no me acababa de convencer esta idea, porque en el sistema donde lo pretendía aplicar, había enlaces que enlazaba a una página estática que si funcionaba, pero que lo que fallaba era el contenido que debía mostrar (vídeos flash) por lo tanto ese supuesto código pensaría que el enlace estaría correcto.

La solución que se me ocurrió después es que sea el usuario que está navegando por la Web el que avise; en realidad es el mismo mecanismo que se está utilizando ahora, es el usuario el que nos indica que un enlace está roto, enviandonos un mail y diciendonos que en "tal" página el enlace no vá. Pero esto lo usan poco usuarios, pues poca gente se toma la molestia de mandarte un correo para advertirte de algo que no va en tu Web.

Con el plugin se le simplifica la tarea al usuario, de manera que al pasar el ratón por encima de un enlace, sale al lado un minúsculo botón Botón enlace roto que permite al usuario avisar del comportamiento incorrecto de ese enlace. De manera que para el usuario no hay complicación ninguna. Por otra parte el plugin internamente calcula todos los datos del enlace que presuntamente no funciona y te manda un mail a la cuenta que este configurada en WordPress.

Aspectos a mejorar en futuras versiones:

  • Que la cuenta de correo sea configurable, por si el administrador prefiere recibir el mensaje en otro correo.
  • Preguntar al usuario un captcha o suma sencilla, de manera que se eviten falsos positivos (envíos por error).

Información útil para desarrolladores:

Es el primer plugin que desarrollo para WordPress, pero al final todos los plugins de todas las plataformas se parecen en algunos aspectos. Por ejemplo los plugins para aplicaciones Web, es muy común que tengan algun mecanismo que te permita procesar la llamada a un archivo del plugin, usualmente para procesar una petición AJAX. En este caso esta información no la encontré en la documentación oficial (aunque ahora sé que está, pero no lo vi) sino que la localicé en la página de este programador.

Resumiendolo un poco, para poder realizar una petición a un archivo de un plugin de WordPress, y que este archivo pueda hacer uso de las librerías de funciones y variables que ofrece WordPress, es necesario que la llamada pase por el Core de WordPress, ya que si le haces la llamada directamente a tu archivo, dichas funciones no estarán disponibles (no las habrá cargado).

Para realizar esto son necesarios dos pasos, primero crear (y enlazar a su handler respectivo) la función encargada de procesar la petición a tu archivo, bien sea un código PHP o cualquier otra cosa, en el siguiente ejemplo proceso dos peticiones diferentes, una a un código PHP y la otra para obtener una imagen:

Pero esto no es todo, Worpress por motivos de seguridad no permite el paso de ninguna petición a los plugins a menos que le identifiques claramente las peticiones que debe autorizar. Esto se realiza dando de alta en WordPress (en un array destinado a tal efecto) el nombre de la variable que identificará la petición de tu plugin:

Eso es todo, este último paso por ejemplo no lo tiene Coppermine Gallery (y creo que debería). Por último, las llamadas a tu plugin las puedes realizar con llamadas del tipo:

A continuación se puede descargar el plugin y todo su código fuente, como siempre con licencia Creative Commons :-)

Plugin WordPress Mailme If Link Broken
Plugin WordPress Mailme If Link Broken
mailme_if_link_broken.zip
Version: 1.0
192.3 KiB
64 Downloads
Details...

Foto aleatoria en WordPress

Objetivo del proyecto:
Lograr que las imágenes de la cabecera de mi WordPress se tomen aleatoriamente de mi Coppermine.

Hoy he terminado de montar un pequeño script que comencé ayer. La idea era cambiar las imágenes que me muestra WordPress en la cabecera, que si bien son monas, pero me gustan más las que yo hago, concretamente quería que las imágenes se cargarán desde un Coppermine que tengo montado. Para ello he indagado un poco y he encontrado una referencia para hacer algo parecido:

Ese código PHP simplemente hace uso de una función ya implementada en el Coppermine que se llama "get_pic_data(...)", tras buscar información sobre la misma en la documentación del código de la aplicación, (concretamente la función se puede ver aquí) he podido comprender su funcionamiento, parámetros que recibe y como los utiliza (es lo maravilloso de Software Libre).

Yo tome ese código original y lo he adaptado para que me devuelva aleatoriamente una imagen de uno de mis álbumes de mi Coppermine, dicho álbum es expresamente para almacenar estas cabeceras; por último sólo necesito tocar en el WordPress para que muestre la imagen a partir del script en cuestión en lugar de las que el tiene.

El código final después de las modificaciones es el siguiente:

He dejado al final comentado las líneas necesarias para mostrar una o todas las imágenes del álbum seleccionado, quizás sea útil.

Como comentaba en el WordPress hay que tocar un último detalle para que en vez de tomar las fotos que tiene por defecto, llame a mi nuevo script. Esto es muy simple desde la propia interfaz del WordPress editando el archivo "header.php" para cambiar que en lugar de mostrar la imagen devuelta por la función "header_image()" muestre la imagen que devuelve mi Script.

Esto mismo se puede hacer (y más elegante/bonito) desde mi punto de vista, en vez de tocando el header.php, editando el archivo "wp-includes/theme.php" para hacer que la funcion "header_image()" devuelva la ruta que llama a mi Script, el único inconveniente de esta segunda opcion es que hay que tener acceso al archivo "wp-includes/theme.php" (normalmente por FTP).

Por ultimo añadir que yo también he tocado el CSS del WordPress para hacer que el título de la web y demás salga encima del banner, ya que no me gusta que se desaproveche tanto espacio en la pantalla, citando a Juande (un ex-jefe mio del que aprendí muchísimo) "la pantalla es un recurso más, y como tal debe ser gestionado eficientemente".

La solución creada cumple con el objetivo inicialmente planteado. Y de hecho está funcionando ahora mismo.

Posibles mejoras:

  1. Sería interesante modificar mi Script para que corrija el MIME type del archivo devuelto y sea acorde a la imagen que se envía, actualmente el MIME type está fijo a "image/png", y las imagenes almacenadas en el Coppermine no tienen siempre ese formato, aunque yo lo suelo utilizar.
  2. Resultaría interesante hacer una modificación al Coppermine, de manera que no sea necesario subir expresamente los banners ya editados desde el PC, sino que al subir cualquier foto, pregunte si quieres sacar un banner a partir de ella, y en caso afirmativo, te muestre una interfaz en la propia web que te permita recortar la imagen subida y el Coppermine se encargue de crear la imagen/banner y guardarlo en el álbum correspondiente de "banners" (además de la imagen original).