Como establecer un Trabajo Cron con WordPress

18 de Mar, 2018

Como establecer un Trabajo Cron con WordPress
5 (100%) 3 votes

Para establecer un trabajo Cron con WordPress, es necesario activar el cron de WordPress desde las funciones de nuestro plugin o tema.

¿Como lo hacemos?

Para ello durante la función de activación de nuestro plugin o tema insertamos los trabajos Cron que necesitemos activar dependiendo del tiempo de ejecución.

  1. // Colocamos la función para ejecutar al instalar el plugin
  2. register_activation_hook( __FILE__, 'execute_on_install' );
  3.  
  4. function execute_on_install() {
  5. // dentro de la función de ejecutar registramos nuestra función a ejecutar al desinstalar
  6. register_uninstall_hook( __FILE__, 'execute_in_uninstall' ));
  7.  
  8. //Primero chequeamos si existe ya ese trabajo Cron
  9. if(!wp_get_schedule('un_evento_cada_hora')) {
  10. //Luego agregamos el trabajo Cron, con la hora actual, el tipo (hourly, twice_a_day, daily) y el hook que usaremos
  11. wp_schedule_event( time(), 'hourly', 'ejecuta_el_evento_de_la_hora' );
  12. }
  13. }

Recordad siempre en el Hook de desactivación, borrar cualquier trabajo Cron que hayais configurado.

  1. function execute_on_unistall(){
  2. wp_clear_scheduled_hook('ejecuta_el_evento_de_la_hora');
  3. }

Una vez tenemos el Trabajo Cron configurado, haremos uso del hook para ejecutar nuestro trabajo.

  1. add_action( 'ejecuta_el_evento_de_la_hora', 'nuestra_función_a_ejecutar') );
  2.  
  3. function nuestra_función_a_ejecutar() {
  4.  
  5. //Lo que se va a ejecutar cada hora
  6.  
  7. echo "Ejecutando Cron Cada Hora";
  8.  
  9. }

Pero el Cron de WordPress solo se ejecuta cuando alguien visita tu página, en caso de páginas pocos visitadas, podemos apoyarnos en el Cron del Servidor.

Para ello debemos primero configurar WordPress para evitar que ejecute el Cron por su cuenta

Primero debemos evitar se ejecute el Cron de WordPress por defecto, para ello en el wp-config.php agregamos

  1. define('DISABLE_WP_CRON', true);

Luego en nuestro servidor ingresamos nuestro Cron, por ejemplo si queremos hacerlo cada 45 minutos

45 * * * * wget -q -O – http://nuestraurl.com/wp-cron.php?doing_wp_cron

Para más información de como ejecutar un Cron en servidor, podes ver esta entrada Establecer un trabajo Cron en un servidor con Linux (ubuntu) ó Ejecutar un trabajo Cron en GAE con PHP