Cron para WordPress MultiSite

Una de las recomendaciones habituales que se hacen para WordPress para una mejor optimización es la de no usar el sistema de WP-Cron nativo, sino que hacer llamadas mediante un programador de tareas.

Y aunque existen múltiples formas de hacer las peticiones para los crones, la óptima es usar WP-CLI.

En un WordPress simple podríamos hacer una petición tal que así:

*/5 * * * * wp cron event run --due-now --path=/home/example.com/ >/dev/null 2>&1

Este código lanzaría todos los hooks pendientes cada 5 minutos.

Pero, en un WordPress MultiSite hay que tener presente que cada uno de los subsitios ha de lanzar su propio cron… y, si tienes 3 o 4 controlados, pues podrías añadir esas 3 o 4 líneas en el cron… pero ¿qué pasa si tienes sitios que se van creando o van archivando?

En este caso podemos hacer un pequeño script que sea el que se encargue de hacer las peticiones. Por ejemplo podemos guardarlo como cron.sh.

#!/bin/bash
WP_PATH="/webs/example.com/"

SITE_URLS=`php "$(which wp)" site list --fields=url --archived=0 --deleted=0 --format=csv --path="$WP_PATH" | sed 1d`

for SITE_URL in $SITE_URLS
do
  php "$(which wp)" cron event run  --due-now --url="$SITE_URL" --path="$WP_PATH" --quiet
done

Con este código básicamente hacemos 2 pasos.

El primero de ellos es sacar un listado de todos los sitios web que hay en el WordPress Multisite, pasándole la ruta donde está el wp-config.php.

Una vez tenemos la lista, vamos sitio a sitio y lanzamos los crones pendientes que haya para ese sitio.

Ahora podremos configurar este cron como:

*/5 * * * * bash /home/cron.sh >/dev/null 2>&1

Con este sistema podremos programar los crones y dará igual si se añaden o archivan sitios, ya que cada vez que se lanza la tarea sacará la lista de sitios disponibles que no hayan sido archivados o eliminados.


Sobre este documento

Este documento está regulado por la licencia EUPL v1.2, publicado en WP SysAdmin y creado por Javier Casares. Por favor, si utilizas este contenido en tu sitio web, tu presentación o cualquier material que distribuyas, recuerda hacer una mención a este sitio o a su autor, y teniendo que poner el material que crees bajo licencia EUPL.

Deja un comentario