Verzögern Sie eine function, jede function!

Ich versuche ein Problem mit einer Implementierung von Woocommerce zu lösen, an der ich arbeite. Am Ende der Dankes-Seite rufe ich eine function auf, um die Bestellung automatisch abzuschließen, wenn es sich um eine virtuelle handelt. Dies wiederum triggers andere functionen aus, die eine merkliche Menge an Zeit benötigen, um ausgeführt zu werden (erzeugt ein großes Array von Codes in der DB und verbindet diese mit der Reihenfolge). Das wurde erwartet, ich plante diesen process als Hintergrund zu haben.

Was nicht erwartet wurde, ist, dass dies die Dankeschön-Seitenerstellung stoppt.

Im Grunde wartet es, bis alles fertig ist, bevor die Dankeseite fertig ist. Beachten Sie, dass die Dank-Seite nicht von den anderen processen angezeigt werden muss. Es wird einfach an Ort und Stelle eingefroren, während dieser Thread die ganze Kraft schwemmt.

Es scheint mir, dass alles in einem einzigen PHP-Thread ausgeführt wird; Wenn es etwas tut, kann es nichts anderes tun.

Gibt es eine Möglichkeit für mich, den Start dieser function zu verschieben, bis die Dankeseite dem Kunden angezeigt wurde?

Ich habe Cronjobs angeschaut, um die Bestellungen automatisch zu vervollständigen, aber vielleicht wäre das unzuverlässig. Ich habe keine Ahnung, wie ich es umsetzen soll.

Ich habe andere Erwähnungen dieses Problems in anderen Threads gefunden, aber nichts, was wie ein “goldener Standard” Weg erschien, diese Art von Verzögerungen zu implementieren.

Vielen Dank für Ihre Hilfe bei der Lösung!

Solutions Collecting From Web of "Verzögern Sie eine function, jede function!"

Sie könnten dies über WP Cron mit wp_schedule_single_event() lösen. Damit dies ordnungsgemäß funktioniert, müssen Sie jedoch das Standardcron (das von einem Benutzer ausgeführt wird, der die Site besucht) deaktivieren und stattdessen einen geeigneten Cronjob / Crontab verwenden. EasyEngine hat ein gutes Tutorial, um wp-cron zu deaktivieren und stattdessen cronjob zu verwenden .

Eine Alternative wäre dies über eine AJAX-Anfrage zu lösen. Sie können die function über JS auf der Dankeseite aufrufen. Der Codex erklärt, wie man das macht , in einfachen Worten könnte es so aussehen

  

und

 add_action( 'wp_ajax_do_my_long_action', 'prefix_ajax_add_foobar' ); function prefix_ajax_add_foobar() { // handle request // Don't forget to stop execution afterward. wp_die(); }