2016-07-07 277 views
0

如何在WordPress中阻止表單重新提交WordPress - 如何防止表單重新提交?

我有一個自定義頁面的表單:

<?php 
/* 
Template Name: Submission 
*/ 

get_header(); ?> 

    <!-- page article --> 
    <?php 
    // Include the page nav. 
    get_template_part('nav-page', 'nav'); 
    ?> 

    <!-- container --> 
    <div class="container"> 

     <!-- item --> 
     <div class="col-md-4"> 

      <!-- content --> 
      <div class="multimedia-submission-text-block"> 
       <?php 
       // Start the loop. 
       while (have_posts()) : the_post(); 

        // Include the page content template. 
        get_template_part('content-page-article-submission', 'page psubmission'); 

       // End the loop. 
       endwhile; 
       ?> 
      </div> 
      <!-- content --> 

     </div> 
     <!-- item --> 

     <!-- form --> 
     <div class="col-md-8"> 
      <?php 
      // Set default variables. 
      $anon_submission_name = ''; 
      $anon_submission_email = ''; 
      $anon_submission_biography = ''; 
      $success = false; 
      $error = false; 

      if (
       isset($_POST['anon_submission_form_create_post_submitted']) 
       && wp_verify_nonce($_POST['anon_submission_form_create_post_submitted'],'anon_submission_form_create_post') 
      ) { 
       $anon_submission_name = trim($_POST['anon_submission_name']); 
       $anon_submission_email = trim($_POST['anon_submission_email']); 
       $anon_submission_biography = trim($_POST['anon_submission_biography']); 

       if ($anon_submission_title != '' 
        && $anon_submission_name != '' 
        && $anon_submission_email != '' 
        && $anon_submission_biography != '' 
       ) { 
        // post_author Take (int) The ID of the user who added the post. Default is the current user ID 
        $post_data = array(
         'post_title' => $anon_submission_title, 
         // 'post_content' => $anon_submission_description, 
         'post_status' => 'pending', 
         'post_author' => 1, // admin user id 
         'post_type' => 'post' 
        ); 

        // Insert the post and get its id. 
        $post_id = wp_insert_post($post_data); 

        if($post_id){ 
         // Save other info in meta. 
         update_post_meta($post_id,'anon_submission_meta_name', $anon_submission_name); 
         update_post_meta($post_id,'anon_submission_meta_email', $anon_submission_email); 
         update_post_meta($post_id,'anon_submission_meta_biography', $anon_submission_biography); 

         $success = true; 
         echo '<p class="alert alert-success"><span class="close" data-dismiss="alert">&times;</span> Work submitted and awaiting moderation. Thank you for your submission.</p>'; 

        } 

       } else { // author or text field is empty 

        $error = true; 
        echo '<p class="alert alert-danger"><span class="close" data-dismiss="alert">&times;</span> Work NOT submitted! Please correct the error(s) below.</p>'; 

       } 
      } 
      ?> 

      <form class="form-submission" method="post" action="<?php echo $current_url . '?' . mt_rand(1, 1000); ?>"> 

      <?php wp_nonce_field('anon_submission_form_create_post', 'anon_submission_form_create_post_submitted'); ?> 

      <div class="row"> 

       <!-- item --> 
       <div class="col-md-6"> 

        <div class="form-group<?php if ($error && empty($anon_submission_name)): ?> has-error<?php endif; ?>"> 
         <label for="inputName">Name (required)</label> 
         <input type="text" class="form-control" id="input-name" placeholder="Name" name="anon_submission_name" value="<?php if ($error) echo $anon_submission_name; ?>"> 
        </div> 

        <div class="form-group<?php if ($error && empty($anon_submission_email)): ?> has-error<?php endif; ?>"> 
         <label for="inputEmail">Email Address (required)</label> 
         <input type="email" class="form-control" id="input-email" placeholder="Email" name="anon_submission_email" value="<?php if ($error) echo $anon_submission_email; ?>"> 
        </div> 

        <div class="form-group<?php if ($error && empty($anon_submission_biography)): ?> has-error<?php endif; ?>"> 
         <label for="inputMessage">Biography (required)</label> 
         <textarea class="form-control" rows="6" placeholder="Biography" name="anon_submission_biography"><?php if ($error) echo $anon_submission_biography; ?></textarea> 
        </div> 


       </div> 
       <!-- item --> 

      </div> 

      <button type="submit" class="btn btn-default no-gradient">Submit</button> 

      </form> 

     </div> 
     <!-- form --> 
    </div> 
    <!-- container --> 

<?php get_footer(); ?> 

當您單擊刷新按鈕,你總能得到「確認重新提交表單」的彈出你是否已經提供了所有需要的字段或信息不。

任何想法?

編輯:

重定向:

... 
} else { // author or text field is empty 

    wp_redirect(home_url()); 

} 

錯誤:

Warning: Cannot modify header information - headers already sent by (output started at /var/www/project-path/wp-includes/embed.php:363) in /var/www/project-path/wp-includes/pluggable.php on line 1167

+0

你需要發出一個redir等表格提交後(如果表格有效,當然) –

+0

我已經嘗試過,但我得到一個錯誤 - '頭已發送'。請參閱我上面的編輯。謝謝。 – laukok

回答

1

不要寫在你的模板文件你的行動。在主題的functions.php

add_action('init','your_function_name'); 

function your_function_name(){ 
if($_POST['your_var']){ 
    //...... do what ever 
    // then if neeeded do wp_redirect 
} 
} 

希望這可以解決您的問題。

0

一個快速的解決方案:

我把處理代碼:

  <?php 
      // Set default variables. 
      $anon_submission_name = ''; 
      $anon_submission_email = ''; 
      $anon_submission_biography = ''; 
      $success = false; 
      $error = false; 
      .... 

前:

<?php 
/* 
Template Name: Submission 
*/ 

get_header(); ?> 

然後確認併發送表單後重定向:

// Redirect to prevent form resubmission. 
wp_redirect(get_permalink($post->ID) . '?success=true');