Verarbeitung von Ergebnissen aus Daten, die in admin_post eingebunden sind


9

Ich schreibe ein Plugin, das ein Formular verwendet, um einige Daten an sich selbst weiterzuleiten.

Gibt es eine Möglichkeit, dies "The WordPress Way" zu tun?

Beispielformularcode (auf einer benutzerdefinierten Untermenüseite, die unter "Extras" hinzugefügt wurde):

<form action="<?php echo get_admin_url() . 'admin-post.php'; ?>" method="post">
    <input name="some_input" type="text">
    <input name="other_input" type="text">
</form>

Dann auf der logischen Seite des Plugins:

function my_process_form_data() {
    // Process the form data here and return the results
}
add_action( 'admin_post', 'my_process_form_data' );

Nachdem ich das Formular verarbeitet und die resultierenden Daten (als etwas großes Array gespeichert) gespeichert habe, wie kann ich diese Daten am besten an die von mir erstellte benutzerdefinierte Untermenüseite zurückgeben?

Ich verstehe, dass es einige Optionen gibt:

  • Anstatt auf "admin-post.php" zu posten, könnte ich direkt auf der Seite posten. Dies führt jedoch zu unordentlichem Code und unordentlichen Bedingungen (dh wenn Ergebnisse vorliegen, laden Sie diese, andernfalls laden Sie diese. Idealerweise sollten das Template und die Logik getrennt gehalten werden.
  • Verwenden Sie wp_redirect und speichern Sie die Daten in der URL, zu der sie umgeleitet werden. Ich habe jedoch eine große Anzahl von Daten, die ich an den Endbenutzer zurückgeben kann. Dies ist also keine Option.
  • Serialisieren Sie die Daten und speichern Sie sie vorübergehend in der Datenbank über Transienten oder Optionen. Deaktivieren Sie die Daten in der Datenbank, sobald der Benutzer sie gesehen hat. Aber das fühlt sich sehr "hackisch" an.

Irgendwelche Vorschläge, wie ich diese große Datenmenge "auf WordPress-Weise" auf meine benutzerdefinierte Untermenüseite zurückbringen kann?


Sie können eine benutzerdefinierte Aktion als admin_post_myaction hinzufügen und dann Ihrem Formular ein verstecktes Feld action = myaction hinzufügen. Das einzige Problem ist, wie das Formular bei einem Fehler erneut angezeigt wird (Echo gibt nur den Inhalt ohne das eigentliche Dashboard zurück).
FrEaKmAn

1
Siehe meine Antwort mit Transienten hier: [1]: wordpress.stackexchange.com/a/203359/6593
Mos Fetisch

Wenn Sie eine Nonce verwenden, können Sie $ _POST ('_ wp_http_referer') aufrufen, um die Formular-URL abzurufen, und dann wp_safe_redirect und add_query_arg, um Status und Daten zurückzugeben. Siehe meine vollständige Antwort hier wordpress.stackexchange.com/a/354269/84702
juananruiz

Antworten:


1

Die WordPress-Methode dazu besteht darin, den admin_postHook überhaupt nicht zu verwenden. Da diese Frage vor einiger Zeit ruhig gestellt wurde, frage ich mich, ob damals eine Option verfügbar war.

Auf jeden Fall sollten Sie eine benutzerdefinierte Einstellungsseite erstellen . Schauen Sie sich das vollständige Beispiel im verlinkten Beitrag an. Sie müssen für jedes Feld einen Rückruf erstellen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.