Automatización en WordPress: Hooks & Cron

Automatización en WordPress: Hooks & Cron

Cómo hacer tareas programadas en WordPress cuando ocurren ciertos eventos o cuando pasa un tiempo definido. #cron #wp #wordpress #hook

6ba65e44abea73ee048e9e9384cdf330?s=128

Braulio Aquino

July 23, 2016
Tweet

Transcript

  1. Programando tareas en WordPress Hooks + Cron Sesión para el

    #WPPerú Meetup - Marzo, 2017 @braulioaquino www.orange612.com
  2. Orange612.com Bach. Comp. Científica IV Dan de Taekwon-Do ITF Braulio

    Aquino
  3. “ Automatización Conjunto de procedimientos automáticos.

  4. ◉ Recibir un correo cuando una nueva entrada sea publicada.

    ◉ Aprobar nuevas entradas automáticamente X veces al día. ◉ Cambiar el rol de colaborador a autor a quienes tengan X publicaciones aprobadas. Automatización
  5. ◉ Cerrar comentarios de una entrada luego de X días

    de publicado. ◉ Validar registros por correo y autodescartar los que no hayan validado en X días. ◉ Cualquier orden por combinación de tiempo o acción. Automatización
  6. ¿Cómo se logran las tareas automáticas?

  7. Action hooks + Cron jobs + Programación pura y dura.

  8. “ Action hooks Algo que permite hacer algo cuando ocurre

    algo.
  9. “ Cron jobs Crean o ejecutan tareas programadas por tiempo.

  10. “ Programación pura y dura Code is poetry

  11. Action hooks

  12. Action hooks <?php add_action('hook','función',10,1); ?>

  13. Action hooks <?php add_action('hook','función',10,1); ?> Función a ejecutarse Cantidad de

    variables Prioridad Acción que ocurre
  14. Action hooks <?php add_action('publish_post','o612_mail',10,2); function o612_mail( $ID, $post ) {

    $to = 'braulioaquino@gmail.com'; $subject = $post->post_title . ' publicado'; $msg = 'Ahora puedes visitar el artículo '. $post->post_title.' en '.get_permalink($ID); wp_mail( $to, $subject, $msg ); } ?>
  15. Action hooks ◉ init ◉ wp_head ◉ wp_footer ◉ admin_init

    ◉ after_setup_theme ◉ template_redirect ◉ comment_post ◉ set_user_role ◉ admin_notices ◉ publish_post ◉ switch_theme ◉ delete_user ◉ password_reset ◉ add_meta_boxes
  16. Listado de acciones. codex.wordpress.org/Plugin_API/Action_Reference Action hooks

  17. Cron

  18. ◉ Se va a indicar a la computadora que ejecute

    una función cada tantos segundos. ◉ La indicación se tiene que dar una sola vez, de lo contrario se crearían varias órdenes. ◉ Cuando se deja de usar el cron este se tiene que eliminar. Cron
  19. Algoritmo: ◉ Si el cron no existe, lo creo. ◉

    El cron indica que se ejecute un hook cada cierto tiempo. ◉ El hook va a invocar a nuestra función. Cron
  20. Action hooks <?php if ( ! wp_next_scheduled('evento') ) { wp_schedule_event(

    time(),'intervalo','evento' ); } add_action('evento','función'); ?>
  21. Action hooks <?php if ( ! wp_next_scheduled('evento') ) { wp_schedule_event(

    time(),'intervalo','evento' ); } add_action('evento','función'); ?>
  22. Action hooks <?php if ( ! wp_next_scheduled('evento') ) { wp_schedule_event(

    time(),'intervalo','evento' ); } add_action('evento','función'); ?>
  23. Action hooks <?php if ( ! wp_next_scheduled('evento') ) { wp_schedule_event(

    time(),'intervalo','evento' ); } add_action('evento','función'); ?>
  24. Action hooks <?php if ( ! wp_next_scheduled('evento') ) { wp_schedule_event(

    time(),'intervalo','evento' ); } add_action('evento','función'); ?>
  25. Action hooks <?php if ( ! wp_next_scheduled('evento') ) { wp_schedule_event(

    time(),'intervalo','evento' ); } add_action('evento','función'); ?> hourly twicedaily daily Personalizado
  26. Action hooks <?php if ( ! wp_next_scheduled('evento') ) { wp_schedule_event(

    time(),'intervalo','evento' ); } add_action('evento','función'); ?>
  27. Action hooks <?php if ( ! wp_next_scheduled('evento') ) { wp_schedule_event(

    time(),'intervalo','evento' ); } add_action('evento','función'); ?>
  28. Variables para crear un nuevo intervalo: ◉ El nombre clave

    del nuevo intervalo. ◉ El valor en segundos. ◉ El nombre común del intervalo. Cron
  29. Cron <?php add_filter('cron_schedules','f_10_minutes'); function f_10_minutes( $schedules ) { $schedules['ten_minutes'] =

    array( 'interval' => 10*60, 'display' => 'Cada 10 minutos' ); return $schedules; } ?>
  30. Eliminar un cron que ya no es útil: Cron <?php

    if ( wp_next_scheduled('evento') ) { wp_clear_scheduled_hook('evento'); } ?>
  31. Ejemplos

  32. “ Hooks Recibir un correo cuando una nueva entrada sea

    publicada.
  33. add_action('publish_post','o612_mail',10,2); function o612_mail( $ID, $post ) { $subject = $post->post_title

    . ' publicado'; $msg = 'Ahora puedes visitar el artículo '. $post->post_title.' en '.get_permalink($ID); $users = get_users('role=subscriber'); foreach( $users as $user ) { wp_mail( $user->user_email, $subject, $msg ); } }
  34. “ Cron Aprobar nuevas entradas automáticamente una vez al día.

  35. if ( !wp_next_scheduled('cron_day') ) { wp_schedule_event(time(),'daily','cron_day'); } add_action('cron_day','daily_function'); function daily_function()

    { global $wpdb; $id = $wpdb->get_var( "SELECT id FROM $wpdb->posts WHERE post_type='post' AND post_status='draft' ORDER BY rand() LIMIT 1" ); wp_update_post( array('ID'=>$id,'post_status'=>'publish') ); }
  36. “ Hook Cambiar el rol de colaborador a autor a

    quienes tengan X publicaciones aprobadas.
  37. ◉ Cada vez que el hook publish_post es llamado consultamos

    si el autor tiene rol contributor. ◉ Si cumple, preguntamos cuántos artículos tiene publicados. ◉ Si la cantidad de publicados es igual al número que elegimos, cambiamos el rol con wp_update_user( array('ID'=>$id, 'role'=>'author') ); Algoritmo
  38. “ Cron Cerrar comentarios de una entrada luego de X

    días de publicado.
  39. ◉ Usar wp_schedule_event para un cron diario. ◉ Hacemos un

    query con los argumentos 'comment_status' => 'open', 'date_query' => array('column' => 'post_date', 'after' => '- 30 days') ◉ Recorremos los resultados y en cada uno usamos wp_update_post( array('ID'=>$id,'comment_status'=>'closed') ); Algoritmo
  40. “ Hook + Cron Validar registros por correo y autodescartar

    los que no hayan validado en X días.
  41. ◉ Cuando el hook user_register es llamado: ◦ Con add_user_meta();

    guardamos un campo con una clave random. ◦ Enviar por mail al usuario un enlace a /algo/?codigo=id-claverandom ◦ Al visitar el enlace dividimos $_GET['codigo'] y con get_user_meta($id,$clave,$single ); se valida o no al usuario. Algoritmo
  42. ◉ Mientras, cuando un cron diario es llamado: ◦ Invocamos

    los ids de los usuarios no validados. ◦ Revisamos la fecha de registro en cada usuario con get_userdata->user_registered ◦ Si la fecha es superior a los días deseados enviamos un mail al usuario indicando que procedemos a cancelar el registro con wp_delete_user(); Algoritmo
  43. Braulio Aquino ◉ orange612.com ◉ braulioaquino.com ◉ braulioaquino@gmail.com ◉ speakerdeck.com/braulioaquino

    ¡Gracias! Automatización en WordPress - Sesión para el #WPPerú Meetup - Marzo, 2017 - Plantilla Viola de slidescarnival.com