Programmatically publish a post (custom post type) with custom fields

I have a custom post type ‘Participant’ with many custom fields. I also have a form with corresponding input fields for the user to fill out. When he submits the form, I want a new post to be generated with each custom fields containing the value chosen by the user.

Is it possible to do and if so, how?

Related posts

Leave a Reply

3 comments

  1. 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);
    }
    
  2. 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 :)
    }
    
    
  3. 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.