La meta
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.
La cuestión
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 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é trabajos cron están programados.
Después de un par de cambios logré corregirlos, y mejor, cuando presioné "Ejecutar ahora", recibí un correo electrónico en mi bandeja de entrada.
Pero por qué los cron no se ejecutan cuando visito mi sitio después de 8 minutos. ¿Qué es lo que posiblemente está mal con este código? Tengo que decir que esta es la primera vez que uso WP Cron.
Intenté más
Después del comentario de vancoder id decidió probar si el código funciona si pongo el siguiente código directamente en 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 debe ir a otra página antes de ejecutar este código. Pero por otro lado, esto tampoco funciona, así que ese no sería mi primer problema ...
schedule_event( )
, digamos, en la parte superior del archivo incluido cargado por el shortcode.
schedule_event( $_SESSION['insert_id'] );
despide?