El objetivo
Quiero usar wp_schedule_single_event( )
para ejecutar un solo evento que me envíe un correo electrónico 8 minutos después de que el usuario envíe un formulario.
El problema
El siguiente código está en mi functions.php
:
function nkapi_send_to_system( $args ) {
wp_mail( 'xxx', 'xxx', $args );
}
add_action( 'nkapi_send', 'nkapi_send_to_system' );
function schedule_event( $id ) {
wp_schedule_single_event( current_time( 'timestamp' ) + 480, 'nkapi_send', array( $id ) );
}
Y el siguiente código se usa para llamar a schedule-event
:
schedule_event( $_SESSION['insert_id'] ); // the $_SESSION var contains an INT
Después de esperar más de 8 minutos, no había un correo electrónico en mi bandeja de entrada.
Lo que probé
Con el complemento Core Control es posible ver qué tareas cron están programadas.
Despuésdeunpardecambioslogréquefueranbastantecorrectos,ymejor,cuandopresioné"Ejecutar ahora", recibí un correo electrónico en mi bandeja de entrada.
Pero, ¿por qué no se ejecutan los crons cuando visito mi sitio después de 8 minutos? ¿Qué es lo que está mal con este código? Tengo que decir que esta es la primera vez que utilizo WP Cron.
Intenté más
Después del comentario de vancoder , el ID decidió probar si el código funciona si pongo el siguiente código directamente en el functions.php
:
function schedule_event( $id ) {
wp_schedule_single_event( time(), 'nkapi_send', array( $id ) );
}
if ( isset( $_SESSION['insert_id'] ) ) {
if ( ! array_key_exists( 'insert_scheduled', $_SESSION ) || $_SESSION['insert_scheduled'] != $_SESSION['insert_id'] ) {
schedule_event( $_SESSION['insert_id'] );
$_SESSION['insert_scheduled'] = $_SESSION['insert_id'];
}
}
La desventaja de este código es que el usuario tiene que ir a otra página antes de que se ejecute este código. Pero por otro lado, esto tampoco funciona, por lo que no sería mi primer problema ...