私はその仕事がユーザー購読フォームでカスタムページを作成することであるプラグインを書きました。フォームページは次のように作成されます。
$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);
これはhttp://example.com/account-new/
に購読申し込みフォームをレンダリングする新しいページを作成します。同じプロセスを使用して、POSTデータをhttp://example.com/account-pending/
に受け取るページを作成しました。
私のテーマは、プラグインとは無関係ですが、フォームの開始タグは次のようになります。
<form method="post" id="new-account-form" action="/account-pending/">
送信すると、Chromeで投稿データがアカウント保留ページに送信されることがわかりますが、PHPStormを使用してPHPコードをデバッグすると、 $ _POSTオブジェクトが設定されていません 。
/account-pending/
ページには、POSTデータを処理するための次の関数が含まれています。
public function get_account_pending()
{
if (isset( $_POST['my_check_value'])) {
$username = $_POST['username'];
$password = $_POST['userpass'];
$firstname = $_POST['firstname'];
etc...
ポストアクションをキャプチャするためのアクションも追加しました。
add_action( 'wp', array( &$this, 'get_account_pending' ) );
しかし、私はまだ何かが足りないのです。 $ _POSTオブジェクトを削除しているものを見つけるにはどうすればよいですか?コードのこの時点では、次の変数だけが設定されています。
$this
$_GET
$_REQUEST
$_SERVER
$GLOBALS
/account-pending/
ページで受信するためのPOSTデータを正しく設定するために必要な手順がどこかにありませんか。
下記のようにcURLコマンドでデータを送信すれば$ _POSTデータを見ることができます。
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
これは、問題がwordpress(またはPHP)が$ _POST変数をクリアしていること、または私のフォームがデータを正しく送信していないことを示しているようです。
あなたの$ _POSTデータが消えた理由はわかりません。ただし、バックエンドの関数を使用してフォームデータを処理するためにadmin_post/admin_post_nopriv
フックを使用することを検討してください。それが関数が作られたものです。関数の終わりに、このwp_redirect(home_url('/account-pending'))
を使ってアカウント保留ページにリダイレクトできます。