En un artículo anterior habíamos visto cómo realizar un procesamiento por lotes usando el plugin locomotive, sin embargo si necesitas más flexibilidad o quieres tener tu propio procesamiento por lotes dentro de un plugin, entonces este artículo te servirá de guía.
Generalidades
Si necesitas procesar una gran cantidad de datos, es mejor dividir el proceso en lotes, de esta forma evitarás sobrecargar al servidor e iras procesando tus datos en consultas mucho más pequeñas.
En este artículo veremos dos formas de lograr esto, la primera a través de la recarga del navegador y la otra usando Ajax.
Lo que el código de ejemplo nos mostrará será algo similar a la siguiente imagen:

Proceso por lotes con recarga del navegador
Este proceso se basa en una función javascript que carga una url con determinados parámetros cada vez que se cumple una condición
El siguiente es un plugin de ejemplo que lo puedes instalar y probar en tu sitio web WordPress, se creará una nueva opción bajo el menú de Herramientas llamada: Proceso por lotes recarga
En el código anterior
- Creamos una nueva opción de menú en el backend de WordPress que hace referencia a la función dcms_batch_process_options()
- Dentro de esta función obtenemos los valores de la url, y creamos el botón que dará inicio al proceso
- También hay una condicional para crear un código javascript con una redirección a una url con parámetros
- La lógica es que se llame a esa misma página cada vez con parámetros de urls diferentes
- Cuando ya no se cumpla la condición entonces el proceso habrá terminado
Proceso por lotes usando Ajax
Este caso es un poco más complejo, ya que habrá más código javascript de por medio, sin embargo es mucho más óptimo ya que no se tiene que recargar el navegador cada vez.
El proceso se basa en una función javascript que se llama así misma, de manera recursiva, cada vez que se cumple una condición.
Código PHP
En el código anterior:
- Creamos la opción de menú Proceso por lotes Ajax bajo el menú de Herramientas del backend de WordPress
- Este menú hace referencia a la función function dcms_batch_process_ajax_options() que crea el botón que dará inicio al proceso
- Además encolamos el archivo javascript que cargará el archivo script.js
- Tenemos también un hook wp_ajax_dcms_process_batch_ajax que hace referencia a la función dcms_process_batch_ajax() en donde se realizará el proceso enviado por el archivo javascript
- Dentro de la función del proceso Ajax comprobamos las variables enviadas y realizamos los cambios correspondientes, luego devolvemos los valores actualizados para que los siga procesando el archivo javascript
Código Javascript
En el código anterior:
- Creamos un evento click para el botón y llamamos a la función dcms_process_step()
- Dentro de la función usamos Ajax y por cada llamada con éxito actualizamos la información
- Condicionalmente comprobamos el status enviado por el archivo PHP, y de acuerdo a eso llamamos recursivamente a la función o damos por finalizado el proceso
Conclusión
Tal como has podido comprobar, es posible realizar tu propia lógica de proceso por lotes a través de código, esto te puede servir para implementar plugins que necesitan procesar gran cantidad de datos, ya que estarás optimizando este proceso realizándolo en bloques más pequeños cada vez, sin saturar los recursos de tu servidor y dando una mejor experiencia de usuario.
¿Aún con dudas?, en el siguiente video se detallan los puntos anteriores: