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/
?
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.
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'))
.