web-dev-qa-db-fra.com

Comment conserver les données $ _POST lors de la soumission d'un formulaire à une page personnalisée

J'ai écrit un plugin dont le travail est de créer une page personnalisée avec un formulaire d'abonnement utilisateur. La page de formulaire est créée comme ceci:

$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);     

Cela crée une nouvelle page à http://example.com/account-new/ qui restitue un formulaire d’abonnement. J'ai utilisé le même processus pour créer une page qui reçoit les données POST à http://example.com/account-pending/.

Dans mon thème, qui est indépendant du plugin, la balise d'ouverture du formulaire se présente comme suit:

<form method="post" id="new-account-form" action="/account-pending/">

Lors de l'envoi, je vois dans Chrome que les données de publication sont envoyées à la page en attente du compte, mais lorsque je débogue le code PHP avec PHPStorm, je constate que l'objet $ _POST n'est pas défini .

La page /account-pending/ contient la fonction suivante destinée à traiter les données POST:

public function get_account_pending()
{

    if (isset( $_POST['my_check_value'])) {
        $username =       $_POST['username'];
        $password =       $_POST['userpass'];
        $firstname =      $_POST['firstname'];
etc...

J'ai aussi ajouté une action pour capturer l'action post avec

add_action( 'wp', array( &$this, 'get_account_pending' ) );

mais il me manque encore quelque chose. Comment trouver ce qui enlève l'objet $ _POST? À ce stade du code, seules les variables suivantes sont définies:

$this
$_GET
$_REQUEST
$_SERVER
$GLOBALS

Me manque-t-il une étape quelque part qui est nécessaire pour configurer correctement les données POST pour les recevoir sur la page /account-pending/?

Modifier:

Je peux voir les données $ _POST si j'envoie les données via une commande cURL comme ci-dessous:

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

Cela semble indiquer que le problème provient de l'effacement de la variable $ _POST par wordpress (ou PHP), ou que mon formulaire ne soumet pas les données correctement.

1
katahdin

Je ne sais pas pourquoi vos données $ _POST disparaissent. Toutefois, envisagez d'utiliser le hook admin_post/admin_post_nopriv pour traiter les données de formulaire à l'aide d'une fonction sur le back-end. C'est ce que la fonction a été faite pour. À la fin de la fonction, vous pouvez ensuite rediriger vers la page en attente de compte en utilisant cette wp_redirect(home_url('/account-pending')).

1