O objetivo
Eu quero usar wp_schedule_single_event( )
para executar um único evento que me envia um email 8 minutos após o usuário enviar um formulário.
O problema
O código a seguir está no meu 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 o seguinte código é usado para chamar schedule-event
:
schedule_event( $_SESSION['insert_id'] ); // the $_SESSION var contains an INT
Depois de esperar mais de 8 minutos, não havia um email na minha caixa de entrada.
O que eu tentei
Com o plugin Core Control , é possível ver quais tarefas do cron estão agendadas.
Depois de algumas alterações, eu consegui corrigi-las de maneira correta e, melhor, ao clicar em "Executar agora", recebo um e-mail na minha caixa de entrada.
Mas por que o cron não é executado quando visito meu site após 8 minutos. O que possivelmente está errado com esse código? Eu tenho que dizer que esta é minha primeira vez usando o WP Cron.
Eu tentei mais
Após o comentário do vancoder id decidi testar se o código funciona se eu colocar o seguinte código diretamente no 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'];
}
}
A desvantagem desse código é que o usuário precisa ir para outra página antes que esse código seja executado. Mas, por outro lado, isso também não funciona, de modo que não seria meu primeiro problema ...
schedule_event( )
, digamos, no topo do arquivo incluído carregado pelo código abreviado.
schedule_event( $_SESSION['insert_id'] );
demitido?