Front end submit form with jquery form plugin

Maybe someone can help me with a small problem I’m having. I’m trying to use this: http://jquery.malsup.com/form/ to create a submit form for WordPress. I’ve tested it on a regular site(not WP) and it works. I can’t figure out why it won’t work in wp.

This is my form. I’ve created two page templates, one has the form, the other has the wp_insert_post code. If I change the form action to action=”http://mysite.com/page.php” it works, if I point it to a page template it doesn’t. I need it to point to a page template for the wp_insert_post code to work.

This is on one first page:

<form id="myForm" action="http://mysite.com/submitest" method="post"> 
Name: <input type="text" name="name" /> 
Comment: <textarea name="comment"></textarea> 
<input type="submit" value="Submit Comment" /> 

Thanks

1 Answer
1

Leave the action value as blank. Give the submit button a name as name="form_sub". Then add the following code to your functions.php file. Check the codex for init hook.
You can create a ‘Thank You’ page, or a confirmation page where the user should go after successful submission.

<?php
add_action('init', 'form_submit');

function form_submit(){
    if(isset($_POST['form_sub']))
    {
        //here you'll have your form data in a $_POST array, you can check it using a print_r. parse the form and insert the post
        $title = $_POST['name'];
        $content = $_POST['comment'];

        //change the category and author as you want
        $post_obj = array(
                        'post_title' => $title,
                        'post_content' => $content,
                        'post_category' => array(1), //Uncategorized
                        'post_status' => 'draft',
                        'post_author' => 1 //Admin
                       );
        $id = wp_insert_post($post_obj);

        //check if successfully submitted
        if(isset($id) && !is_wp_error($id))
        {
            //redirect to a thank you page, make sure the slug is 'thank-you'
            wp_redirect(home_url('/thank-you'));
            exit;
        } 
    }
}
?>

Try this. Let me know if you are stuck.

Edit:
This is how the form template should be. The submit button should have the name attribute, not the form.

<?php /* Template Name: Submit */ ?> 
<?php get_header(); ?> 
Form this: 
<form action="" method="post"> 
    Name: <input type="text" name="name" /> 
    Comment: <textarea name="comment"></textarea>
    <input type="submit" value="Submit" name="form_sub" />
</form>
<?php get_footer(); ?>

Leave a Comment