Creating WordPress Post Programmatically

Sometimes we need to create a WordPress post without login into a WordPress site; Here in this article, I am going to show how to create a WordPress post Programmatically by submitting the HTML Form with the help of a PHP script.

First, create your HTML form using any text editor.


<form name="myform" action="savepost.php" method="post"> 
<label for="post_title">post_title:</label><br> 
<input type="text" id="post_title" name="post_title" value=""><br>
<label for="post_desc">post_desc:</label><br>
<textarea id="post_desc" name="post_desc"></textarea><br>
<input type="submit" value="Submit">

In this example, I am going to take only two fields only 1st post title and 2nd post description. When the user submits this form the savepost.php will create a new post on your WordPress website.

You have to define a few more parameters to save this form as a post, which includes post statuspost datepost author, and post type.

post status

you can set post status as “draft” or “publish”.

post date:

Use date(‘Y-m-d H:i:s’) function to set post date time

post author

Check the wp_users table to get the user_id.

post type

You can set post type as “post” or “page.

PHP Script

This script must be saved on the WordPress site because the function wp_insert_post is defined in the wp_load.php file. And this file must be included in the script to use the wp_insert_post function else it will give an error that the function is not defined.

require_once  './wp-load.php';

$post_title = isset($_POST['post_title']) ? $_POST['post_title'] : "";
$post_desc = isset($_POST['post_desc']) ? $_POST['post_desc'] : "";
$post_status = "draft";
$post_author = 1 ;// admin user_id is 1
$new_post = array(
    'post_title' => "$post_title",
    'post_content' => "$post_desc",
    'post_status' => "$post_status",
    'post_date' => date('Y-m-d H:i:s'),
    'post_author' => "$post_author",
    'post_type' => "$post_type"
$post_id = wp_insert_post($new_post);
//echo $post_id;
//var_dump($post_id); die; 

  echo "Post Created Successfully";
 echo "Unable to create post";