Le but
Je souhaite utiliser wp_schedule_single_event( )
pour exécuter un événement unique qui m'envoie un e-mail 8 minutes après que l'utilisateur a soumis un formulaire.
Le problème
Le code suivant est dans mon 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 ) );
}
Et le code suivant est utilisé pour appeler schedule-event
:
schedule_event( $_SESSION['insert_id'] ); // the $_SESSION var contains an INT
Après avoir attendu plus de 8 minutes, il n'y avait pas d'e-mail dans ma boîte de réception.
Ce que j'ai essayé
Avec le plugin Core Control, il est possible de voir quels travaux cron sont planifiés.
Après quelques changements, j'ai réussi à les obtenir tout à fait correctement, et mieux, lorsque je clique sur "Exécuter maintenant", je reçois en fait un e-mail dans ma boîte de réception.
Mais pourquoi le cron ne s'exécute pas lorsque je visite mon site après 8 minutes. Qu'est-ce qui ne va peut-être pas avec ce code? Je dois dire que c'est la première fois que j'utilise WP Cron.
J'ai essayé plus
Après le commentaire de vancoder, j'ai décidé de tester si le code fonctionne si je mets le code suivant directement dans le 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'inconvénient de ce code est que l'utilisateur doit aller sur une autre page avant l'exécution de ce code. Mais d'un autre côté, cela ne fonctionne pas non plus, ce ne serait donc pas mon premier problème ...
schedule_event( )
, disons en haut du fichier inclus chargé par le shortcode.
schedule_event( $_SESSION['insert_id'] );
tiré?