I'm following this tutorial to build a front end form:

 * New Post Form for Custom Post Types for the Frontend of Your Site
 * By Jared Williams - http://new2wp.com
 * Last Updated: 8/30/2010

// Check if the form was submitted
if( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] )) {

    // Do some minor form validation to make sure there is content
    if (isset ($_POST['title'])) { 
        $title =  $_POST['title']; 
    } else { 
        echo 'Please enter a title';
    if (isset ($_POST['description'])) { 
        $description = $_POST['description']; 
    } else { 
        echo 'Please enter the content'; 
    $tags = $_POST['post_tags'];

    // Add the content of the form to $post as an array
    $post = array(
        'post_title'    => $title,
        'post_content'  => $description,
        'post_category' => $_POST['cat'],  // Usable for custom taxonomies too
        'tags_input'    => $tags, 
        'post_status'   => 'publish',           // Choose: publish, preview, future, etc.
        'post_type'     => $_POST['post_type']  // Use a custom post type if you want to
    wp_insert_post($post);  // Pass  the value of $post to WordPress the insert function
                            // http://codex.wordpress.org/Function_Reference/wp_insert_post
    wp_redirect( home_url() ); // redirect to home page after submit

} // end IF
// Do the wp_insert_post action to insert it
do_action('wp_insert_post', 'wp_insert_post'); 

<!-- New Post Form -->
<div id="postbox">
    <form id="new_post" name="new_post" method="post" action="">
        <p><label for="title">Title</label><br />
        <input type="text" id="title" value="" tabindex="1" size="20" name="title" />
        <p><label for="description">Description</label><br />
        <textarea id="description" tabindex="3" name="description" cols="50" rows="6"></textarea>
        <p><?php wp_dropdown_categories( 'show_option_none=Category&tab_index=4&taxonomy=category' ); ?></p>
        <p><label for="post_tags">Tags</label>
            <input type="text" value="" tabindex="5" size="16" name="post_tags" id="post_tags" /></p>
        <p align="right"><input type="submit" value="Publish" tabindex="6" id="submit" name="submit" /></p>

        <input type="hidden" name="post_type" id="post_type" value="post" />
        <input type="hidden" name="action" value="post" />
        <?php wp_nonce_field( 'new-post' ); ?>
<!--// New Post Form -->

Right now the action part:

    <form id="new_post" name="new_post" method="post" action="">

Is empty

I tried two things:

I tried placing the the whole code in a file called page-submit.php. I'm getting this:

It seems we can’t find what you’re looking for. Perhaps searching, or one of the links below, can help.

I also tried placing the php part in a file called frontpost.php. and adding this:

<form id="new_post" name="new_post" method="post" action="<?php echo get_template_directory_uri(); ?>/frontpost.php">

to the action. But I get a Server Error.

Any suggestions to fix this?

  • You've added a nonce field, but you haven't checked it! You should check the nonce-field immediately after the action has been checked and only proceed if its correct. – Stephen Harris Jan 26 '12 at 11:23
  • how about leaving it empty? – Bainternet Jan 26 '12 at 13:18

You need to make your processing form a template and apply it to a page if you want wordpress to recognize the form. Then you can set your action to the name of the page with the template applied to it and viola!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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