Das Ziel
Ich möchte wp_schedule_single_event( )
ein einzelnes Ereignis ausführen, das mir 8 Minuten nach dem Absenden eines Formulars durch den Benutzer eine E-Mail sendet.
Die Angelegenheit
Der folgende Code ist in meinem 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 ) );
}
Und der folgende Code wird zum Aufrufen verwendet schedule-event
:
schedule_event( $_SESSION['insert_id'] ); // the $_SESSION var contains an INT
Nach einer Wartezeit von mehr als 8 Minuten befand sich keine E-Mail in meinem Posteingang.
Was ich versucht habe
Mit dem Plugin Core Control ist es möglich zu sehen, welche Cronjobs geplant sind.
Nach ein paar Änderungen habe ich es geschafft, sie richtig zu machen, und besser, wenn ich auf "Jetzt ausführen" drücke, bekomme ich tatsächlich eine E-Mail in meinem Posteingang.
Aber warum werden die Crons nicht ausgeführt, wenn ich meine Site nach 8 Minuten besuche? Was ist möglicherweise falsch an diesem Code? Ich muss sagen, dass ich WP Cron zum ersten Mal benutze.
Ich habe mehr versucht
Nach dem Kommentar von Vancoder ID beschlossen, zu testen, ob der Code funktioniert, wenn ich den folgenden Code direkt in das 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'];
}
}
Der Nachteil dieses Codes ist, dass der Benutzer eine andere Seite aufrufen muss, bevor dieser Code ausgeführt wird. Aber auf der anderen Seite funktioniert das auch nicht, das wäre nicht meine erste Ausgabe ...
schedule_event( )
Datei aus, beispielsweise über der vom Shortcode geladenen enthaltenen Datei.
schedule_event( $_SESSION['insert_id'] );
gefeuert?