Wordpress - Programmatically publish a post (custom post type) with custom fields
Use wp_insert_post() and add_post_meta(), like this:
// insert the post and set the category
$post_id = wp_insert_post(array (
'post_type' => 'your_post_type',
'post_title' => $your_title,
'post_content' => $your_content,
'post_status' => 'publish',
'comment_status' => 'closed', // if you prefer
'ping_status' => 'closed', // if you prefer
));
if ($post_id) {
// insert post meta
add_post_meta($post_id, '_your_custom_1', $custom1);
add_post_meta($post_id, '_your_custom_2', $custom2);
add_post_meta($post_id, '_your_custom_3', $custom3);
}
In addition to the great answer of @webaware above, this can be handled since wordpress 4.4.0 all via the wp_insert_post call:
$post_id = wp_insert_post(array (
'post_content' => $content,
'post_title' => $title,
'post_type' => 'your_custom_post_type',
'post_status' => 'publish',
// some simple key / value array
'meta_input' => array(
'your_custom_key1' => 'your_custom_value1',
'your_custom_key2' => 'your_custom_value2'
// and so on ;)
)
));
if ($post_id) {
// it worked :)
}
This can be achieved quite easily using the Gravity Forms plugin. You can build a form which populates a Custom Post Type in the backend. This post can be set to appear as a draft or as published. No problem adding custom fields. In my case, I used it to gather client testimonials.