Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

Braulio Aquino

July 23, 2016
Tweet

More Decks by Braulio Aquino

Other Decks in Programming

Transcript

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

    #WPPerú Meetup - Marzo, 2017 @braulioaquino www.orange612.com
  2. ◉ 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
  3. ◉ 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
  4. Action hooks <?php add_action('publish_post','o612_mail',10,2); function o612_mail( $ID, $post ) {

    $to = '[email protected]'; $subject = $post->post_title . ' publicado'; $msg = 'Ahora puedes visitar el artículo '. $post->post_title.' en '.get_permalink($ID); wp_mail( $to, $subject, $msg ); } ?>
  5. 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
  6. ◉ 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
  7. 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
  8. Action hooks <?php if ( ! wp_next_scheduled('evento') ) { wp_schedule_event(

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

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

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

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

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

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

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

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

    del nuevo intervalo. ◉ El valor en segundos. ◉ El nombre común del intervalo. Cron
  17. 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; } ?>
  18. Eliminar un cron que ya no es útil: Cron <?php

    if ( wp_next_scheduled('evento') ) { wp_clear_scheduled_hook('evento'); } ?>
  19. 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 ); } }
  20. 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') ); }
  21. “ Hook Cambiar el rol de colaborador a autor a

    quienes tengan X publicaciones aprobadas.
  22. ◉ 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
  23. ◉ 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
  24. “ Hook + Cron Validar registros por correo y autodescartar

    los que no hayan validado en X días.
  25. ◉ 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
  26. ◉ 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
  27. Braulio Aquino ◉ orange612.com ◉ braulioaquino.com ◉ [email protected] ◉ speakerdeck.com/braulioaquino

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