2

I have a custom front end publishing form on my website, based on this article.

It works perfectly when I put this code inside a page, but when on the front-end page (homepage), 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.

  'post_category' =>  array($_POST['cat'])

  <!-- 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>

anyone knows why it works on every other pages, but not on front page ?

here is my php 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>
3
  • Because the form is using reserved terms - it's working okay on your pages because their permalink overrides the parameters, but if you post to the front page WordPress will interpret the inputs as query parameters, hence why you're redirected to an archive. Commented May 14, 2016 at 17:41
  • @TheDeadMedic, thanks for your reply, is there a way of modify my php code to make it work ? Commented May 15, 2016 at 12:35
  • @TheDeadMedic, thanks, i've found the solution by changing all reserved terms by new terms in my form. I've change "cat" to "mycat", "regions" by "myregions", etc etc... and now it works perfectly fine on every pages. Commented May 15, 2016 at 13:50

1 Answer 1

1

thanks to @TheDeadMedic, I found the solution. I used reserved terms, and that's why Wordpress interpreted my inputs as query parameters.

so for example with my categorys, I had to change my classes in my form :

  'post_category' =>  array($_POST['cat']), // Usable for custom taxonomies too

by

  'post_category' =>  array($_POST['my_cat']), // Usable for custom taxonomies too

and in my form the class name "cat" by "my_cat".

I had to change this every time I used a reserved term.

and now it works perfectly fine !

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.