web-dev-qa-db-ja.com

プラグインファイルからのフォームリクエストの処理

プラグインの中に私は(action =属性を介して).phpファイルに送信する必要がある支払いフォームを持っています。これも私のプラグインに直接あります。いくつかの調査の結果、個々のプラグインファイルを呼び出すための「ワードプレスの方法」は、代わ​​りにindex.phpで実際にカスタムクエリを使用することのようです。私は以下のコードでそうしました、そして、それは働いています、しかし、問題のコードは単にフォームを処理してそれからユーザーを確認ページにリダイレクトする必要がある、私は何も表示する必要はありません。今のところindex.phpテンプレートを実際にロードしているように見えますが、これは無駄に思えます。

私はこれについて正しく行っていますか?そうでない場合は、代わりにどのようにしたらよいでしょうか。

//Register our custom request hook
function tps_space_rental_query_vars($vars) {
$vars[] = 'tps-rent-space';
return $vars;
}
add_filter('query_vars', 'tps_space_rental_query_vars');

//This will allow us to process our payment form the wordpress way
function tps_payment_parse_request($wp) {
if (array_key_exists('tps-rent-space', $wp->query_vars) 
        && $wp->query_vars['tps-rent-space'] == 'chargeform') {

    // process the request, just testing for now
    echo 'This request happened!';
}
}
add_action('parse_request', 'tps_payment_parse_request');
1
Eckstein

最も簡単な方法はinitアクションフックを使うことです

add_action("init", "your_form_handler_action");
function your_form_handler_action(){
    if( isset( $_REQUEST["action"] ) && $_REQUEST["action"] == "your_action_name" ) {
        echo "Response!!!";
    }
}
1
Kudratullah

WordPressには一般的なPOST/GETリクエストエンドポイントがあり、 admin_post_(action) を使用してコードをアクションにフックします。これはWordPressがAJAXリクエストを処理する方法と似ています。 URLを出力するにはadmin_url( 'admin-post.php' )を使用してください。

2
Milo