Registrar y disparar un WP-Cron personalizado
WP-Cron es el sistema de tareas programadas de WordPress. A diferencia del cron del servidor, WP-Cron se activa con las visitas al sitio — si nadie visita el sitio, las tareas no se ejecutan. Para tareas críticas en producción se recomienda desactivar WP-Cron y configurar un cron real del servidor. Aun así, es perfectamente válido para la mayoría de sitios.
Casos de uso: sincronización diaria con una API externa, envío de emails periódicos, limpieza automática de logs o datos temporales, generación programada de informes.
<?php
register_activation_hook( __FILE__, 'mi_plugin_activar_cron' );
function mi_plugin_activar_cron() {
if ( ! wp_next_scheduled( 'mi_tarea_diaria' ) ) {
wp_schedule_event( time(), 'daily', 'mi_tarea_diaria' );
}
}
register_deactivation_hook( __FILE__, 'mi_plugin_desactivar_cron' );
function mi_plugin_desactivar_cron() {
wp_clear_scheduled_hook( 'mi_tarea_diaria' );
}
add_action( 'mi_tarea_diaria', 'ejecutar_tarea_diaria' );
function ejecutar_tarea_diaria() {
update_option( 'mi_ultima_ejecucion', current_time( 'mysql' ) );
}
¿Qué hace cada parte?
- register_activation_hook(): ejecuta la función solo cuando el usuario activa el plugin en el admin. Es el momento correcto para programar eventos.
- wp_next_scheduled(): comprueba si el evento ya está programado antes de añadirlo. Sin esto, cada activación crearía un duplicado.
- wp_schedule_event(): programa el evento. Parámetros: timestamp de primera ejecución, frecuencia (
hourly,twicedaily,dailyo una personalizada), nombre del hook. - register_deactivation_hook(): se ejecuta al desactivar el plugin. Imprescindible para no dejar eventos huérfanos en la base de datos que nunca se ejecutarán.
- wp_clear_scheduled_hook(): elimina todos los eventos programados con ese nombre del hook.
- add_action( ‘mi_tarea_diaria’ ): conecta el hook personalizado con la función que ejecuta el trabajo real. Sin este
add_action, el evento se dispararía pero no haría nada.
