Ich habe ein Plugin geschrieben, dessen Aufgabe es ist, eine benutzerdefinierte Seite mit einem Benutzerabonnementformular zu erstellen. Die Formularseite wird folgendermaßen erstellt:
$page = [
'post_type' => 'page',
'post_content' => '',
'post_status' => 'publish',
'post_title' => 'Create a new account',
'post_name' => 'account new'
];
$page_id = wp_insert_post($page);
Dadurch wird eine neue Seite unter http://example.com/account-new/
erstellt, auf der ein Anmeldeformular für ein Abonnement angezeigt wird. Ich habe auf die gleiche Weise eine Seite erstellt, die die POST -Daten unter http://example.com/account-pending/
empfängt.
In meinem vom Plugin unabhängigen Design sieht das Eröffnungstag des Formulars folgendermaßen aus:
<form method="post" id="new-account-form" action="/account-pending/">
Beim Senden wird in Chrome angezeigt, dass die Post-Daten an die Seite für ausstehende Konten gesendet werden. Wenn ich jedoch den PHP -Code mit PHPStorm debugge, stelle ich fest, dass das $ _POST-Objekt nicht festgelegt ist .
Die Seite /account-pending/
enthält die folgende Funktion, mit der die POST -Daten verarbeitet werden sollen:
public function get_account_pending()
{
if (isset( $_POST['my_check_value'])) {
$username = $_POST['username'];
$password = $_POST['userpass'];
$firstname = $_POST['firstname'];
etc...
Ich habe auch eine Aktion zum Erfassen der Post-Aktion mit hinzugefügt
add_action( 'wp', array( &$this, 'get_account_pending' ) );
aber mir fehlt noch etwas. Wie finde ich heraus, was das Objekt $ _POST entfernt? An dieser Stelle im Code werden nur die folgenden Variablen gesetzt:
$this
$_GET
$_REQUEST
$_SERVER
$GLOBALS
Fehlt irgendwo ein Schritt, der erforderlich ist, um die POST -Daten für den Empfang auf der Seite /account-pending/
ordnungsgemäß einzurichten?
Ich kann die $ _POST-Daten sehen, wenn ich die Daten wie folgt über einen cURL-Befehl sende:
curl -X POST 'firstname=myfirst' -F 'lastname=mylast' -F 'username=username21' -F 'usermail=me%40example.com' -F 'userpass=thisone' -F 'userpass_again=thisone' -F 'my_check_value=on' -F 'billing_address=452+Kennebec+Rd' -F 'billing_apt=' -F 'billing_city=Heretown' -F 'billing_state=ME' -F 'billing_Zip=04444' -F 'card_type=4' -F 'card_number=4111111111111111' -F 'expire_month=07' -F 'expire_year=23' http://example.com/account-pending/?XDEBUG_SESSION_START=10663
Dies scheint darauf hinzudeuten, dass das Problem entweder darin besteht, dass WordPress (oder PHP) die Variable $ _POST löscht, oder dass mein Formular die Daten nicht ordnungsgemäß übermittelt.
Ich weiß nicht, warum Ihre $ _POST-Daten verschwinden. Verwenden Sie jedoch den Hook admin_post/admin_post_nopriv
, um die Formulardaten mithilfe einer Funktion im Back-End zu verarbeiten. Dafür wurde die Funktion gemacht. Am Ende der Funktion können Sie mit dieser wp_redirect(home_url('/account-pending'))
auf die Seite für ausstehende Konten umleiten.