Support » Plugins » Hacks » front end publishing (wp_insert_post) on home page, archive page & search page

  • I’m using a custom front end publishing form on my website using wp_insert_post, based on this article.

    It works perfectly when I put this code inside a page, but when on the front-end page (homepage), archive page and search page, it doesn’t work, and when I submit the form, I’m redirected to an archive.php page, the archive page from the post_category I’ve chosen in my form.

    I think there might be a conflict with my submit button, I really don’t know what’s happening.

    anyone can help me with this ?

    here is my code

    <?php
    if( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) &&  $_POST['action'] == "new_post") {
    
      // Do some minor form validation to make sure there is content
      if (isset ($_POST['title'])) {
        $title =  $_POST['title'];
      } else {
        echo 'veuillez entrer un titre';
      }
      if (isset ($_POST['description'])) {
        $description = $_POST['description'];
      } else {
        echo 'veuillez entrer du texte';
      }
    
      $genre = $_POST['genre'];
      $tranche_age = $_POST['tranche_age'];
    
      // ADD THE FORM INPUT TO $new_post ARRAY
      $new_post = array(
      'post_title'  =>  $title,
      'post_content'  =>  $description,
      'post_category' =>  array($_POST['cat']), // Usable for custom taxonomies too
      //'tax_input' => array( 'regions' => '14' ),
      'post_status' =>  'publish',           // Choose: publish, preview, future, draft, etc.
      'post_type' =>  'post',  //'post',page' or use a custom post type if you want to
      //'genre'  =>  $genre,
      //'tranche_age'  =>  $tranche_age,
      );
    
      //SAVE THE POST
      $pid = wp_insert_post($new_post);
    
      wp_set_post_terms($pid,array($_POST['regions']),'regions',true);
      wp_set_post_terms($pid,array($_POST['sexes']),'sexes',true);
      wp_set_post_terms($pid,array($_POST['ages']),'ages',true);
    
      //REDIRECT TO THE NEW POST ON SAVE
      $link = site_url();
      wp_redirect( $link );
    
      //ADD OUR CUSTOM FIELDS
      //add_post_meta($pid, 'genre', $genre, true);
      //add_post_meta($pid, 'tranche_age', $tranche_age, true); 
    
    } // END THE IF STATEMENT THAT STARTED THE WHOLE FORM
    
    //POST THE POST YO
    do_action('wp_insert_post', 'wp_insert_post');
    
    ?>
    
        <div id="container">
          <div id="content" role="main">
    
        <!-- FRONT END PUBLISHING -->
    
        <div class="wpcf7">
        <form id="new_post" name="new_post" method="post" action="" class="wpcf7-form" enctype="multipart/form-data">
          <!-- post name -->
          <fieldset name="name">
            <label for="title">Titre:</label>
            <input type="text" id="title" value="" tabindex="5" name="title" />
          </fieldset>
    
          <!-- post Category -->
          <fieldset class="category">
            <label for="cat">Catégorie :</label>
            <?php wp_dropdown_categories( 'tab_index=10&taxonomy=category&hide_empty=0&show_option_all=Choisissez une catégorie' ); ?>
          </fieldset>
    
          <!-- post regions -->
          <fieldset class="regions">
            <label for="regions">Région :</label>
            <?php wp_dropdown_categories( 'name=regions&tab_index=10&taxonomy=regions&hide_empty=0&show_option_all=Choisissez une catégorie' ); ?>
          </fieldset>
    
          <!-- post Content -->
          <fieldset class="content">
            <label for="description">Question :</label>
            <textarea id="description" tabindex="14" name="description" cols="80" rows="10"></textarea>
          </fieldset>
    
          <!-- Genre -->
          <input type="hidden" id="sexes" name="sexes" value="26" />
    
          <!-- Tranche d'âge -->
            <?php $date_of_birth = um_user('birth_date'); $age =  CalculateAge($date_of_birth); ?>
    
            <?php if ($age >= 18 && $age <= 25) :?>
    
            <input type="hidden" value="28" id="ages" name="ages" />
    
            <?php endif; ?>
    
            <?php if ($age >= 26 && $age <= 35) :?>
    
            <input type="hidden" value="29" id="ages" name="ages" />
    
            <?php endif; ?>
    
            <?php if ($age >= 36 && $age <= 45) :?>
    
            <input type="hidden" value="30" id="ages" name="ages" />
    
            <?php endif; ?>
    
            <?php if ($age >= 46) :?>
    
            <input type="hidden" value="31" id="ages" name="ages" />
    
            <?php endif; ?>
    
          <fieldset class="submit">
            <input type="submit" value="Envoyer" tabindex="40" id="submit" name="submit" />
          </fieldset>
    
          <input type="hidden" name="action" value="new_post" />
          <?php wp_nonce_field( 'new-post' ); ?>
        </form>
    </div>
    
    </div>
    </div>
Viewing 2 replies - 1 through 2 (of 2 total)
  • Well the short answer is that it’s not likely a conflict with your button, and more likely a conflict with the underlying queries for those pages – they arent’ designed with a ‘single post’ mentality they are designed to show multiple posts, and your form, for submitting a single post, is confusing to those pages.

    Why not just add a link to your post-submit page on those pages and tell people “if you want to submit a post go here”…?

    Change this from

    
      //REDIRECT TO THE NEW POST ON SAVE
      $link = site_url();
      wp_redirect( $link );
    
    

    To

    
      //REDIRECT TO THE NEW POST ON SAVE
      $link = get_permalink( $pid );
      wp_redirect( $link );
    
    
    
Viewing 2 replies - 1 through 2 (of 2 total)
  • The topic ‘front end publishing (wp_insert_post) on home page, archive page & search page’ is closed to new replies.