L'obiettivo. il gol
Voglio utilizzare wp_schedule_single_event( )
per eseguire un singolo evento che mi invia un'e-mail 8 minuti dopo che l'utente invia un modulo.
Il problema
Il seguente codice è nel mio 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 ) );
}
E il seguente codice viene utilizzato per chiamare schedule-event
:
schedule_event( $_SESSION['insert_id'] ); // the $_SESSION var contains an INT
Dopo aver atteso più di 8 minuti non c'era una e-mail nella mia casella di posta.
Quello che ho provato
Con il plug-in Core Control è possibile vedere quali cron job sono programmati.
Dopo un paio di modifiche sono riuscito a renderle abbastanza corrette, e meglio, quando premo "Esegui ora", in realtà ricevo un'e-mail nella mia casella di posta.
Ma perché i cron non vengono eseguiti quando visito il mio sito dopo 8 minuti. Cosa c'è di sbagliato in questo codice? Devo dire che questa è la prima volta che utilizzo WP Cron.
Ho provato di più
Dopo il commento di Vancoder ID ho deciso di verificare se il codice funziona se inserisco il seguente codice direttamente nel 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'];
}
}
L'aspetto negativo di questo codice è che l'utente deve andare su un'altra pagina prima che questo codice venga eseguito. Ma d'altra parte, neanche questo funziona, quindi non sarebbe il mio primo problema ...
schedule_event( )
, diciamo in cima al file incluso caricato dal shortcode.
schedule_event( $_SESSION['insert_id'] );
sparato?