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(); ?>