web-dev-qa-db-de.com

So behalten Sie $ _POST-Daten bei, wenn Sie das Formular an eine benutzerdefinierte Seite senden

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?

Bearbeiten:

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.

1
katahdin

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.