WP-CRON - Tareas programadas en Wordpress

2,830 views

Published on

Ejecuta tareas programadas en Wordpress con el wp-cron. Inciación al uso de esta API con ejemplos de uso. Dentro de las sesiones de formación de Arvisual del 2012

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,830
On SlideShare
0
From Embeds
0
Number of Embeds
16
Actions
Shares
0
Downloads
10
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

WP-CRON - Tareas programadas en Wordpress

  1. 1. wp-cron Tareas programadas en Wordpress Artvisual Formación 2012 sesión 6
  2. 2. Índice 1.Qué es CRON (unix) 2.El cron de Wordpress 3.Crear un evento periódico 4.Crear un evento puntual 5.Crear nuevos intervalos de recurrencia 6.Borrar un evento del cron 7.Cron "real" 8.Cron "real real"
  3. 3. 1. ¿Qué es CRON (unix)? http://es.wikipedia.org/wiki/Cron_Unix Cron es un administrador de tareas automatizadas de UNIX. Ejecuta scripts en segundo plano. Los procesos que deben ejecutarse y la hora en la que deben hacerlo se especifican en el fichero crontab ●periódicamente (cada hora) ●en un momento concreto (todos los miércoles a las 2:00) Usos: - Backups - Envío de emails - Inserción automatizada ...
  4. 4. 2. El cron de Wordpress es un pseudo-cron ¿Por qué? Porque solamente se ejecuta cuando alguien entra a la Web. Cada vez que alguien entra a las Web comprueba si tiene que ejecutar alguna tarea. TAREAS PERIÓDICAS (recurrentes) o PUNTUALES (1 vez). Problema: Si tienes una tarea programada para las 8 AM y no entra nadie hasta las 9 AM, no se ejecutará hasta las 9 AM. HAY SOLUCIONES (puntos 7 y 8)
  5. 5. 3. Crear un evento periódico wp_schedule_event($timestamp, $recurrence, $hook, $args); http://codex.wordpress.org/Function_Reference/wp_schedule_event http://www.webtips.es/como-programar-un-cron-en-wordpress/ Pasos. En el functions.php (o plugin) 1. Se crea el cron if ( !wp_next_scheduled('mi_hook') ) { wp_schedule_event( time(), 'daily', 'mi_hook' ); } 2. Se crea la acción add_action('mi_hook', 'mi_tarea'); 3. Se crea la función que hará nuestra tarea function mi_tarea() { wp_mail('ejemplo@ejemplo.com', 'Mail mandado por el cron', 'Hola, esto es un correo enviado automáticamente'); }
  6. 6. 3.1 Ejemplo // 1 - Se crea el cron function activar_cron () { if(!wp_next_scheduled('prueba_cron')) wp_schedule_event( time(), 'every_minute','prueba_cron'); } add_action('wp', 'activar_cron'); // Hook para activar el cron // 2 - Se crea la acción add_action('prueba_cron','prueba_cron_func'); // 3 - Se crea la función function prueba_cron_func(){ $opcion_guardada = get_option('valor_opcion'); if ( empty($opcion_guardada)){ $opcion_guardada = 0; } update_option('valor_opcion', $opcion_guardada + 1); }
  7. 7. 4. Crear un evento puntual wp_schedule_single_event(time(), 'my_schedule_hook'); function do_this_in_an_hour() { // do something } add_action('my_new_event','do_this_in_an_hour'); if (! wp_schedule_event('my_new_event')) wp_schedule_single_event(time()+3600, 'my_new_event'); // time()+3600 = one hour from now.
  8. 8. 5. Crear nuevos intervalos de recurrencia Wordpress sólo tiene Hourly, Twice Daily y Daily Puedes crear nuevos intervalos de tiempo como "cada minuto", "cada media hora", ... add_filter('cron_schedules','cron_mas_intervalos'); function cron_mas_intervalos($cron_schedules){ // Añado cada media hora $cron_schedules['half_hour'] = array( 'interval'=> 30 * 60, 'display'=> __('Cada media hora') ); return $cron_schedules; } Para ver los intervalos que tienes definidos dump ( wp_get_schedules() )
  9. 9. 6. Borrar un evento http://codex.wordpress. org/Function_Reference/wp_clear_scheduled_hook // If you previously added for example // wp_schedule_single_event( time() + 3600, 'my_new_event' ); wp_clear_scheduled_hook( 'my_new_event' );
  10. 10. 7. Cron real http://elhistorias.com/2011/06/28/wordpress-y-cron/ 1. Desabilitar la ejecución automática del script wp-cron.php añadiendo en wp-config.php define('DISABLE_WP_CRON', true); 2. Añadir la siguiente tarea a crontab (díselo a sistemas!!) */15 * * * * wget -q -O /dev/null http://DOMINIO/wp-cron.php
  11. 11. 7. Cron real real 1. Se crea una línea en el crontab que llama a nuestro script php */20 * * * * /usr/bin/php -f ruta/opiname.es/scripts/insertar.php 2. Se crea un fichero php que cargue Wordpress define('OPINAME_ABSPATH', 'ruta/opiname.es/httpdocs/'); include_once( OPINAME_ABSPATH . 'wp-load.php' ); // a usar Wordpress!
  12. 12. 8. Ejercicio Usando el ejercicio de la sesión 1, borrar todos los posts cada 5 minutos, y volver a crearlos.

×