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.

2 comentarios en «Cron para WordPress MultiSite»

  1. Hola,

    Al margen de añadir en el wp-config.php la línea «define( ‘DISABLE_WP_CRON’, true );»

    ¿Qué sucede si el multisitio tiene dominios distintos ?
    Supongamos tudominio.es para castellano, que además es el sitio principal, y tudominio.gal para gallego.

    ¿Sería suficiente con añadir en el servidor dos peticiones?
    wget -q -O – https://tudominio.es/wp-cron.php?doing_wp_cron >/dev/null 2>&1
    wget -q -O – https://tudominio.gal/wp-cron.php?doing_wp_cron >/dev/null 2>&1

    ¿La llamada al cron del principal ejecuta tareas también de los sitios secundarios?
    ¿La llamada al sitio secundario realmente ejecuta tareas de ese sitio?

    Saludos

  2. Sí, en los casos en los que hay un WordPress MultiSite, el sistema de funcionamiento es básicamente usar el hostname / carpeta corespondiente a cada uno de los sitios. Con eso ya es suficiente.

    Eso sí, tendremos que lanzar tantos crones como sitios tenemos.

    Lo mejor, eso sí, sigue siendo usar WP-CLI en un Cron para WordPress MultiSite.

Los comentarios están cerrados.