Cuando trabajas desarrollando en muchas ocasiones necesitas poder ejecutar tareas programadas de cierta manera: a cierta hora o tras la ejecución de otra en el futuro. WordPress, como buen sistema que ejecuta sobre el servidor, a diferencia de los programas que ejecutan directamente en un equipo de escritorio o móvil por ejemplo; necesita que alguien «lo ejecute» a distancia para poder hacer ejecuciones de este tipo, las llamadas programadas.
Yo mismo uso muchas de estas acciones programadas para poder gestionar el pago fraccionado en la pasarela de pago para RedSys y WooCommerce o en el importador de usuarios y clientes para WordPress y WooCommerce, para hacer importaciones programadas.
WordPress ofrece en su núcleo un manejador de este tipo de eventos programados, el llamado WP Cron, que es útil y correcto pero se queda algo corto para algunas situaciones:
De hecho yo mismo cambie el proceso de importación de usuarios que se hace de forma programada de WP Cron a Action Scheduler para poder manejar ficheros mucho más grandes, porque su flexibilidad me permitía una solución fácil a ese problema y con WP Cron hubiera sido o difícil o imposible.
Sin embargo, como cualquier otra tecnología, tiene puntos a favor y puntos en contra. Hay tareas simples que no necesitan usar Action Scheduler porque de hecho, si quieres usarlo, tienes que instalarlo (en tu plugin) y esto es un problema para algo básico donde WP Cron está integrado en el core y no hay que hacer nada.
Y luego aparte hay otro problema, si por algún motivo algún plugin empieza a enviar miles de peticiones a Action Scheduler, como se guarda un registro de tareas ejecutadas con detalles de la misma, las tablas que lo albergan empiezan a engordar.
Esto afecta de doble manera: rendimiento, porque todo se vuelve más lento llegando a ser peligroso para la estabilidad de la web; y espacio porque he llegado a ver tablas de Action Scheduler de varios gigas, imaginaros lo que eso significa hasta para las copias de seguridad.
Así que os voy a enseñar como limpiar todo esto de forma sencilla. Con SQL y phpMyAdmin podréis hacerlo. Adaptad el nombre de las tablas a vuestro prefijo si lo tenéis cambiado.
DELETE FROM wp_actionscheduler_actions WHERE status = 'complete';
DELETE FROM wp_actionscheduler_actions WHERE status = 'failed';
Porque no tiene sentido guardar datos que se refieren a otros que ya han sido borrados.
DELETE FROM wp_actionscheduler_logs WHERE action_id NOT IN (SELECT action_id FROM wp_actionscheduler_actions);
Y solo un detalle, tened cuidado o contactad con un profesional si no tenéis claro lo que estáis haciendo, porque podéis borrar acciones que sí las necesitábais de alguna manera… así que tenéis la receta pero usadla con conocimiento.
Por cierto, en Ayuda WordPress, han hecho una entrada sobre cómo añadir herramientas a WooCommerce para borrar acciones programadas, muy relacionado con esto y más cómodo de usar si lo haces de forma repetida.
Por qué falla Bizum WooCommerce: detecta errores de credenciales, firma, entorno y pedidos para recuperar…
Elige un plugin gratuito Redsys WordPress con criterio: compatibilidad, seguridad, configuración bancaria y límites para…
¿Qué necesito para activar CECA Online? Revisa contrato bancario, datos del terminal, seguridad, pruebas y…
Aprende a elegir una pasarela para suscripciones en WordPress: revisa recurrencia, compatibilidad, seguridad y soporte…
Elige un plugin Bizum WordPress compatible con tu flujo de venta, configura la pasarela bancaria…
Aprende cómo aceptar CECA en reservas WordPress, configurar pagos seguros y confirmar cada reserva sin…