Ich habe versucht, mit der Aktion ein Formular mit dem folgenden Markup zu verwenden admin-post.php
<form method='post' action='admin-post.php'>
Ich verwende den von Wordpress vorgeschlagenen Aktions-Hook , um die $ _POST-Parameter fortzusetzen, und er funktioniert einwandfrei. Nach der Ausführung bekam ich jedoch eine leere Seite und keine Weiterleitung zurück zur Plugins-Seite. Natürlich könnte ich mit dem Referer eine benutzerdefinierte Umleitung festlegen, aber ist das das normale Verhalten?
Eine Problemumgehung besteht darin action=""
, die Anfrage in meinem normalen Plugin-Code zu verwenden und abzurufen .
plugin-development
forms
Rubberducker
quelle
quelle
admin-post.php
undadmin_post
Aktion verwenden, müssen Sie zurück zu Ihrer Plugin-Seite umleiten .admin_init
zuerst undadmin_post
später verknüpft sind .wp_redirect
funktioniert nicht beim Versenden von Formularen mitadmin-post
. Es wird ein Fehler ausgegeben, dass Header bereits gesendet wurden. Dies scheint also eine wertlose Methode zu sein, um ein Formular zu veröffentlichen und anschließend irgendwo umzuleiten.Antworten:
Vielleicht etwas spät, aber ich bin darauf gestoßen, als ich Probleme hatte, es herauszufinden, also dachte ich, ich würde das, was ich herausgefunden habe, für zukünftige Leute liefern.
Ich habe festgestellt, dass die Grundprinzipien darin bestehen, eine versteckte Eingabe zu benennen
action
, deren Wert eine benutzerdefinierte Set-ID ist. Zum BeispielMit dieser Eingabe können Sie Ihre Formularaktion
admin-post.php
festlegen, die auf eine Aktion verweist . Wir setzen diese Aktion mitadmin_post_custom_form_submit
.Um die Dinge komplizierter zu machen, können wir ein verwenden,
wp_nonce_field
das meiner Meinung nach ein grundlegendes Sicherheitssachen ist. Grundsätzlich wird ein zufälliger $ _POST-Wert hinzugefügt. Meinetwegen.Als nächstes wollen wir unsere Aktion so einstellen:
Wenn also ein Formular gesendet wird
admin-post.php
und ein Aktionswertcustom_form_submit
der Funktionour_custom_form_function
aufgerufen wird! : D.Jetzt sagst du, du bekommst eine weiße Seite. Dies liegt daran, dass wir zu unserem Formular zurückkehren müssen. Ich habe eine einfache verwendet
wp_redirect()
Hoffe das hat geholfen :) Ich werde versuchen herauszufinden, wie ich eine Validierung durchführen und Fehler an unser Weiterleitungsformular zurückgeben kann. Ich denke, die einfachste Idee wäre, einen
$_GET
Wert zu machen und diesen auf unserer Seite zu finden, aber es ist nicht großartig, oder?Ich habe auch festgestellt, dass einmal eingereicht
$_POST
gelöscht wird !! DX Dies hat wahrscheinlich mit der Umleitung zu tun. Ich werde googeln und sehen, was ich finden kann: dHoffe das hat geholfen :)
AKTUALISIEREN
Ich habe noch etwas gearbeitet und festgestellt, dass die einzige Möglichkeit, Werte zurückzugeben, die Verwendung der Variablen $ _GET ist. Auf diese Weise können Sie alle Post-Werte erneut eingeben. Vergessen Sie nicht zu verwenden,
urlencode()
um sicherzustellen, dass Sonderzeichen wie '@' usw. enthalten sind.Ich hatte mehr als eine Seite mit dem, woran ich arbeitete, also habe ich 2 verschiedene Weiterleitungen zu den verschiedenen Seiten durchgeführt und die Fehler usw. eingefügt. Die haben über meinem Formular nach ihnen gesucht.
Eine weitere praktische Funktion.
http_build_request()
kann Arrays in 'url sichere' Arrays verwandeln, so dass Sie sie über $ _GET-Anfragen usw. senden können.quelle
admin.php?page=your_custom_page_where_form_is
ichadd_settings_error()
für den Anzeigefehler verwendet habe, aber es wird kein Fehler angezeigt, weil die Seite umgeleitet wird ..! Kannst du mir bitte dabei helfen? danke$_GET
. Dies ist in Ordnung für einige grundlegende Informationen, wie das Anzeigen des Namens oder der E-Mail-Adresse oder das Übergeben einer?success=true
Flagge, die Ihre Erfolgsmeldung auslöst. Es funktioniert jedoch nicht für die Rückgabe großer Datenmengen aus der Formularübermittlung, Anwendungsfall, sie senden das Formular und es gibt Daten von einer API zurück.Vor dem Umleiten können Sie Validierungsfehler speichern und Werte in einem Transienten veröffentlichen. Diese Werte bleiben nach der URL-Umleitung bestehen.
Genau so macht es WP Core für die Settings-API, wenn Fehler zurückgegeben werden.
Damit:
-validieren Sie Formulardaten
-speichere Postdaten in transient mit set_transient ()
-Speichern Sie alle vorübergehenden Fehler
-umleiten, um Ausgabe zu bilden
-Überprüfen Sie auf vorübergehende Fehler
-Laden Sie Post-Werte von transient in Formularfelder
Sie können eine Sitzung oder die Options-API anstelle eines Transienten verwenden.
Jetzt habe ich mit verschiedenen Methoden zum Behandeln von Formularübermittlungen sowohl im Frontend als auch im Administrator experimentiert. Ich bin mir nicht sicher, ob admin_post_ {action} so praktisch ist, da Daten und Fehler während der Umleitung beibehalten werden müssen. Die Verwendung des Hooks init oder admin_init zum Überprüfen der Formularübermittlung ist möglicherweise einfacher. Sie können Ihr Formular auch einfach wieder auf derselben Seite veröffentlichen und die Formularübermittlung bearbeiten, bevor das Formular angezeigt wird.
quelle
set_transient()
hat eine maximale Länge von 172 Zeichen. Dies ist eine plausible Option, wenn Sie keine GET-Variablen verwenden oder nicht verwenden können und es nicht viele Daten gibt. AFAIK, Wordpress verwendet keine Sitzungen (standardmäßig). Für ein Plugin ist dies möglicherweise unangemessen. Options API wäre eine schreckliche Wahl. - Die letzte Option, wenn Sie eine API aufrufen und eine große Datenmenge zurückgeben müssen, ist das POSTEN an die Site / Seite selbst. - Dasadmin-post.php
ist begrenzt und wahrscheinlich nicht die richtige Wahl, wenn Sie eine große Datenmenge zurückgeben müssen.Die kurze Antwort lautet, dass Sie die ganze Arbeit erledigen müssen: Speichern Sie die Benutzereingaben in der Datenbank, überprüfen Sie sie auf Fehler oder Erfolg und leiten Sie sie nach Abschluss weiter, wo immer Sie möchten.
Wenn Sie erneut zum Formular umleiten möchten, können Sie ein Feld verwenden, das durch
wp_nonce()
Einfügen in das$_POST
von Ihrem Formular gesendete Array generiert wird :$_POST['_wp_http_referer']
Schließlich können Sie eine Erfolgs- oder Fehlermeldung mit umleiten und senden
wp_safe_redirect()
,esc_url_raw()
undadd_query_arg()
.quelle