web-dev-qa-db-ja.com

カスタムページにフォームを送信するときに$ _POSTデータを保持する方法

私はその仕事がユーザー購読フォームでカスタムページを作成することであるプラグインを書きました。フォームページは次のように作成されます。

$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変数をクリアしていること、または私のフォームがデータを正しく送信していないことを示しているようです。

1
katahdin

あなたの$ _POSTデータが消えた理由はわかりません。ただし、バックエンドの関数を使用してフォームデータを処理するためにadmin_post/admin_post_noprivフックを使用することを検討してください。それが関数が作られたものです。関数の終わりに、このwp_redirect(home_url('/account-pending'))を使ってアカウント保留ページにリダイレクトできます。