2017-01-25 19 views
0

背景:私はそれにフォームを含むwordpressプラグインを開発しました。フォームに記入するのが面倒な場合、ユーザーに通知する方法が必要です。私の最初の傾向はPHPのセッション変数でした。プラグインにさまざまなコードを追加して、ヘッダーの先頭にあるsession_start()を含めてこの作業を行いました。だから、私はユーザーにメッセージを表示するための最良の方法について研究を始めました。Wordpress - フロントエンドユーザーに「Flash Messages」を使用する最良の方法

私はPHPのセッションへの代替手段として、クッキーを使用することができますが、私の質問は次のとおりです。

のWordpressの内側のフロントエンドメッセージを設定する最良の方法は何ですか?私はあなたにワードプレスを心から慣れています。私はWordpressのグローバル変数について聞いたことがありますか? Wordpressはどこにでもアクセスできる設定可能なグローバル変数のようなものを提供していますか?それはうまくいくでしょう。 (私はこれを膨らませることが嫌な)いくつかのプラグインがありますか?クッキーは最善のルートですか?ここで

は私が達成しようとしているものを示すことができるコードのスニペットです:

フロントエンドフォーム(ショート)

<form method='POST'class="kb_donation_form" action="<?= plugins_url() ?>/kb-donations/includes/handler.php"> 

      <div class="form-group"> 
       <label for="kb_first_name">First Name</label> 
       <input type="text" class="form-control" id="kb_first_name" name="kb_first_name" placeholder="First Name"> 
      </div> 

      <div class="form-group"> 
       <label for="kb_last_name">Last Name</label> 
       <input type="text" class="form-control" id="kb_last_name" name="kb_last_name" placeholder="First Name"> 
      </div> 
      <div class="form-group"> 
       <label for="kb_email">Email</label> 
       <input type="email" class="form-control" id="kb_email" name="kb_email" placeholder="Email Address"> 
      </div> 

      <div class="form-group"> 
       <label for="kb_grad_year">Graduation Year</label> 
       <select id="kb_grad_year" name="kb_grad_year" class="form-control"> 
        <option value="friend">I am just a friend.</option> 
        <option value="1950">1950</option> 
       </select> 
      </div> 

      <div class="form-group"> 
       <label for="kb_donation_amount">Donation Amount</label> 
       <input type="text" class="form-control" id="kb_donation_amount" name="kb_donation_amount" placeholder="100.00"> 
      </div> 

      <div class="form-group"> 
       <input type="submit" name="submit" value="Make Donation" class="btn btn-default"> 
      </div> 
     </form> 

ポストハンドラコード:

if(isset($_POST['submit'])) { 
    if(
     !empty($_POST['kb_first_name']) && 
     !empty($_POST['kb_last_name']) && 
     !empty($_POST['kb_email']) && 
     !empty($_POST['kb_grad_year']) && 
     !empty($_POST['kb_donation_amount']) 
     ) { 
     // All Data Is Set 

     // Make sure email is valid format 
     $email = filter_var($_POST['kb_email'], FILTER_VALIDATE_EMAIL); 

     if(!empty($email)) { // ect.. ect..} 
else { 
// screw up 
// Notify the user 
// $_SESSION['error'] = 'You Screwed Up' === NEED ALTERNATIVE 
} 

答えて

1

ファーストあなたのPHPスクリプトのリンクは、 action = "/ kb-donations/includes/handler.php"のように提供しないでください。

セキュリティ上の問題が発生する可能性があります。それは物事を行うWordPressの方法ではありません。

フォームを処理するには、「admin_post」(admin_post_YOUR_ACTION)と「admin_post_nopriv」(admin_post_nopriv_YOUR_ACTION)のアクションを使用します。ここでは良い説明です:

https://www.sitepoint.com/handling-post-requests-the-wordpress-way/

、その後、あなたは、ユーザーにエラーメッセージや成功メッセージを与えるためにフラッシュメッセージを設定する必要があります。

バックエンドフォームの場合は、「admin_notices」アクションを使用します。ここでは良い説明は次のとおりです。フロントエンドのフォームの場合

https://premium.wpmudev.org/blog/adding-admin-notices/

私は。フォームモデルを使用して、フラッシュメッセージ(バックアップされたモデルの「エラー」専用変数に格納することにより、成功またはエラーメッセージ)を表示できます。

またはii。 「template_notices」アクションを使用することができます。

またはiii。 "session_start"(セッションを開始し、セッションにデータを格納し、表示後にクリアする)のソリューションを使用することができます。

グローバル変数の使用は常に悪い考えです。

+0

フィードバックありがとうございます。それは感謝しています。これは私がWordpress用に開発した初めてのプラグインで、それ以来非常に大きくなっています。 – Radmation