フォーム送信の処理方法


13

私はワードプレスが初めてなので、いくつかの問題に直面しています。

ユースケースのシナリオは次のとおりです。

  1. ユーザーには、学校でクラブを始めるための申請書が表示されます。
  2. ユーザーはフォームに入力し、「送信」ボタンを押します。
  3. フォームを検証する必要があります。
  4. 検証が成功した場合、データはclub_detailsdbのカスタムテーブルに保存され、ユーザーにはメッセージが表示されます(例:送信ありがとうございます。承認のためにアプリケーションが管理者に送信されます)。
  5. 管理者はWordpress管理パネルにアクセスして、クラブの保留中の要求を承認します。(データはdbから取得され、管理者に表示されます)。

私は次のことをしました:

  • for 1)Wordpress HTMLエディターを使用してアプリケーションフォーム/ページを作成しました。
  • 3)validation.js検証コードを持つjavascriptファイル()があります。
  • for 4)アプリケーションの詳細をdbのカスタムテーブルに保存club-functions.phpする機能storeInDB()を持つphpファイル()があります。
  • 5)独自のプラグインフォルダーを作成club.phpし、Wordpress管理パネルで管理者にアプリケーションの詳細を表示するphpファイル()を追加しました。

私は次の場所で立ち往生しています:フォームの送信を処理する方法。javascriptのvalidate関数を呼び出し、後で関数を呼び出すコードをどこに配置する必要がありstoreInDB()ます。

どのようにこれを達成するのか、このアプローチは良いですか?事前に感謝します。

回答:


13

wp_ajaxまたはwp_ajax_nopriv関数を使用する必要があります。

まず、送信フォームにアクション属性値としてadmin ajax URLを配置する必要があります。

<form id="" action="<?php echo admin_url('admin-ajax.php'); ?>" method="post" class="form" >

このようにして、フォームはデフォルトでadmin-ajax.phpに送信されます(JavaScriptなし)。JavaScriptを使用して、AJAXを使用して動作させることができます。

次は、送信されたデータを使用する関数です。フォーム内に、wp_nonce_fieldアクションという名前の入力と非表示の入力を配置します。私のアクション値はadd_transferです。

<?php wp_nonce_field('add_transfer','security-code-here'); ?>
<input name="action" value="add_transfer" type="hidden">

このフォームを処理する関数は、functions.phpまたはプラグインファイルに配置できます。wp_ajax_これがログインユーザー専用のフォームである場合、アクション名を使用できます。ログインしていないユーザーの場合はwp_ajax_nopriv、代わりにアクション名を使用します。

add_action('wp_ajax_add_transfer', 'process_add_transfer');

function process_add_transfer() {
if ( empty($_POST) || !wp_verify_nonce($_POST['security-code-here'],'add_transfer') ) {
    echo 'You targeted the right function, but sorry, your nonce did not verify.';
    die();
} else {
    // do your function here 
    wp_redirect($redirect_url_for_non_ajax_request);
}

返信ありがとうございます。「Wordpress HTMLエディター」でフォームを作成しています。だから、私は「Exec-PHP」プラグインをインストールしなければならないので、PHPコードをフォームに含めるのは良いですか?あなたの考えを共有してください。
プージャ

アクション値をyour-site-url.com/wp-admin/admin-ajax.phpに置き換えるだけです
ifdion

それは動作しますか?
ifdion

1
admin-ajax.phpなしで同じことを達成する良い方法はありますか?
タヒルヤシン14

1
@TheWPNoviceまだ/wp-admin/ディレクトリにあると思います。そのファイルを変更したり追加したりする必要はないことに注意してください。
ifdion

2

最初に、クライアント側でJavaScript検証が機能することを説明します。そのため、ユーザーがjsを無効にすると、問題が発生します。

そのため、入力値もサーバー側で検証する必要があります。

それを念頭に置いて:

jsコードは、フォームがあるページから直接呼び出すことができます。onsubmit属性は、通常の呼び出し方法です。

<form onSubmit="validateForms()" method="post" action="domain.com/club-contacts">
    <label for="app_email">Application</label>
    <input type="text" name="app_email" id="app_email" value="" />
    <input type="hidden" name="app_application" value="1" />
    <input type="submit" name="app_form_send" value="Send" />
</form>

page.php

これは、カスタムテンプレートページまたはsingle.phpにすることもできます。この場合、99は、承認されたかエラーがあった場合にユーザーに示す特定のページのIDです。

if ( get_the_ID() == '99' ) {
  // lets validate the input
  if( !empty($_POST['app_application']) && $_POST['app_application'] == "1"  ) {
   if(!empty($_POST['app_email'])) {
    // check the codex for [Data_Validation][1]
    }
  }
}

返信してくれてありがとう。フォームデータをさらに処理するために、どこでPHPコードを呼び出すことができますか?
プージャ

アクション属性はファイルを指します。そのファイルでは、フォームをフィルタリングして検証できます。私はそれを含むように私の応答を更新します。
-pcarvalho
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.