Cel
Chcę użyć wp_schedule_single_event( )
do wykonania pojedynczego zdarzenia, które wyśle mi wiadomość e-mail 8 minut po przesłaniu formularza przez użytkownika.
Problem
W moim jest następujący kod 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 ) );
}
Do wywołania służy następujący kod schedule-event
:
schedule_event( $_SESSION['insert_id'] ); // the $_SESSION var contains an INT
Po odczekaniu ponad 8 minut w mojej skrzynce odbiorczej nie było wiadomości e-mail.
Co próbowałem
Dzięki wtyczce Core Control można zobaczyć, które zadania cron są zaplanowane.
Po kilku zmianach udało mi się je całkowicie poprawić, a lepiej, gdy kliknę „Uruchom teraz”, faktycznie otrzymuję wiadomość e-mail w mojej skrzynce odbiorczej.
Ale dlaczego cron nie wykonuje się, gdy odwiedzam moją stronę po 8 minutach. Co może być nie tak z tym kodem? Muszę powiedzieć, że po raz pierwszy używam WP Cron.
Próbowałem więcej
Po komentarzu id vancodera postanowiłem sprawdzić, czy kod działa, jeśli wstawię następujący kod bezpośrednio do 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'];
}
}
Minusem tego kodu jest to, że użytkownik musi przejść do innej strony, zanim ten kod zostanie wykonany. Ale z drugiej strony to też nie działa, więc nie byłby to mój pierwszy problem ...
schedule_event( )
, powiedzmy na górze dołączonego pliku załadowanego przez shortcode.
schedule_event( $_SESSION['insert_id'] );
zwolniony?