In this guide we will create a standard WordPress post from a form with two fields Title and Content. The functionality can be easily extended to insert Custom post types, by referring to the documentation for the wp_insert_post WordPress function.
Creating a post
Add the following code to the theme functions.php file (or create a plugin for it).
1234 5 6 7 8 9 10 11 12 13 14 15 | add_filter('quform_post_process_1', function (array $result, Quform_Form $form) { $title = $form->getValue('quform_1_3'); $content = $form->getValue('quform_1_4'); $post = array( 'post_title' => $title, 'post_content' => $content, 'post_type' => 'post', 'post_status' => 'publish' ); wp_insert_post($post); return $result; }, 10, 2); |
add_filter('quform_post_process_1', function (array $result, Quform_Form $form) { $title = $form->getValue('quform_1_3'); $content = $form->getValue('quform_1_4'); $post = array( 'post_title' => $title, 'post_content' => $content, 'post_type' => 'post', 'post_status' => 'publish' ); wp_insert_post($post); return $result; }, 10, 2);
Creating a page
To create a page, simply change the post_type
to page
.
1
2
3
45
6
| $post = array( 'post_title' => $title, 'post_content' => $content, 'post_type' => 'page', 'post_status' => 'publish' ); |
$post = array( 'post_title' => $title, 'post_content' => $content, 'post_type' => 'page', 'post_status' => 'publish' );
Custom post types
To insert a custom post type, simply change the post_type
with the custom post type.
1
2
3
45
6
| $post = array( 'post_title' => $title, 'post_content' => $content, 'post_type' => 'portfolio', 'post_status' => 'publish' ); |
$post = array( 'post_title' => $title, 'post_content' => $content, 'post_type' => 'portfolio', 'post_status' => 'publish' );
Creating a draft
To create a draft instead of a published post, simply change the post_status
to draft
.
1
2
3
4
56
| $post = array( 'post_title' => $title, 'post_content' => $content, 'post_type' => 'portfolio', 'post_status' => 'draft'); |
$post = array( 'post_title' => $title, 'post_content' => $content, 'post_type' => 'portfolio', 'post_status' => 'draft' );
Customizing the post content
To add a mixture of HTML and form values we will create a separate file for the HTML and include it when creating the post.
Step 1
Create a plugin for this custom code.
Step 2
Create a file named form-post.php and place it into the plugin directory at wp-content/plugins/quform-custom-code/form-post.php
Inside this file add the post content in text and HTML, you can use the PHP code shown in the example below to get the form values for particular elements, just replace 1_3
with the element unique ID.
<?php if (!defined('ABSPATH')) exit; // Prevent direct script access ?> <h2>Submitted form data</h2> <p>Submitted field 1: <?php echo $form->getValueHtml('quform_1_3'); ?></p> <p>Submitted field 2: <?php echo $form->getValueHtml('quform_1_4'); ?></p> <p>Submitted field 3: <?php echo $form->getValueHtml('quform_1_5'); ?></p> <p>Submitted field 4: <?php echo $form->getValueHtml('quform_1_6'); ?></p> <p>Submitted field 5: <?php echo $form->getValueHtml('quform_1_7'); ?></p>
Step 3
Add the following code to the quform-custom-code.php file created in Step 1.
123 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | add_filter('quform_post_process_1', function (array $result, Quform_Form $form) { $title = $form->getValue('quform_1_3'); ob_start(); include __DIR__ . '/form-post.php'; $content = ob_get_clean(); $post = array( 'post_title' => $title, 'post_content' => $content, 'post_type' => 'post', 'post_status' => 'publish' ); wp_insert_post($post); return $result; }, 10, 2); |
add_filter('quform_post_process_1', function (array $result, Quform_Form $form) { $title = $form->getValue('quform_1_3'); ob_start(); include __DIR__ . '/form-post.php'; $content = ob_get_clean(); $post = array( 'post_title' => $title, 'post_content' => $content, 'post_type' => 'post', 'post_status' => 'publish' ); wp_insert_post($post); return $result; }, 10, 2);
Saving data to custom fields (postmeta)
To save data to custom fields, add the following code to the theme functions.php file (or create a plugin for it).
1234 5 6 7 8 9 10 11 12 13 14151617 18 19 | add_filter('quform_post_process_1', function (array $result, Quform_Form $form) { $title = $form->getValue('quform_1_3'); $content = $form->getValue('quform_1_4'); $post = array( 'post_title' => $title, 'post_content' => $content, 'post_type' => 'post', 'post_status' => 'publish' ); $postId = wp_insert_post($post); add_post_meta($postId, 'my_custom_field_key_1', $form->getValue('quform_1_5')); add_post_meta($postId, 'my_custom_field_key_2', $form->getValue('quform_1_6')); add_post_meta($postId, 'my_custom_field_key_3', $form->getValue('quform_1_7')); return $result; }, 10, 2); |
add_filter('quform_post_process_1', function (array $result, Quform_Form $form) { $title = $form->getValue('quform_1_3'); $content = $form->getValue('quform_1_4'); $post = array( 'post_title' => $title, 'post_content' => $content, 'post_type' => 'post', 'post_status' => 'publish' ); $postId = wp_insert_post($post); add_post_meta($postId, 'my_custom_field_key_1', $form->getValue('quform_1_5')); add_post_meta($postId, 'my_custom_field_key_2', $form->getValue('quform_1_6')); add_post_meta($postId, 'my_custom_field_key_3', $form->getValue('quform_1_7')); return $result; }, 10, 2);
- On line 1, change the number
1
to the form ID - On line 2, change
1_3
to the unique ID of the title Text element - On line 3, change
1_4
to the unique ID of the content Textarea element - On lines 14, 15 and 16, change
my_custom_field_key_1
,my_custom_field_key_2
andmy_custom_field_key_3
to the custom field meta keys you want to add the data to, and change1_5
,1_6
and1_7
to the unique ID of the elements you want to take the data from
Adding the created post to a category
To add the post to a category, add the following code to the theme functions.php file (or create a plugin for it).
1234 5 6 7 8 9 10 11 12 1314 15 16 | add_filter('quform_post_process_1', function (array $result, Quform_Form $form) { $title = $form->getValue('quform_1_3'); $content = $form->getValue('quform_1_4'); $post = array( 'post_title' => $title, 'post_content' => $content, 'post_type' => 'post', 'post_status' => 'publish' ); $postId = wp_insert_post($post); wp_set_object_terms($postId, 'my_category_slug', 'category'); return $result; }, 10, 2); |
add_filter('quform_post_process_1', function (array $result, Quform_Form $form) { $title = $form->getValue('quform_1_3'); $content = $form->getValue('quform_1_4'); $post = array( 'post_title' => $title, 'post_content' => $content, 'post_type' => 'post', 'post_status' => 'publish' ); $postId = wp_insert_post($post); wp_set_object_terms($postId, 'my_category_slug', 'category'); return $result; }, 10, 2);
Adding a featured image from a File Upload element
To add a featured image from a File Upload element, you’ll need to add additional code shown in the example below. Add the following code to the theme functions.php file (or create a plugin for it).
1234 5 6 7 8 9 10 11 12 13 14 1516 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | add_filter('quform_post_process_1', function (array $result, Quform_Form $form) { $title = $form->getValue('quform_1_3'); $content = $form->getValue('quform_1_4'); $post = array( 'post_title' => $title, 'post_content' => $content, 'post_type' => 'post', 'post_status' => 'publish' ); $postId = wp_insert_post($post); // Add attachment $file = $form->getValue('quform_1_5'); if (isset($file[0])) { $file = $file[0]; $filename = $file['name']; $path = $file['path']; $wpFiletype = wp_check_filetype($filename); $attachment = array( 'guid' => $file['url'], 'post_mime_type' => $wpFiletype['type'], 'post_title' => preg_replace('/\.[^.]+$/', '', $filename), 'post_content' => '', 'post_status' => 'inherit' ); $attachId = wp_insert_attachment($attachment, $path, $postId); require_once ABSPATH . 'wp-admin/includes/image.php'; $attachData = wp_generate_attachment_metadata($attachId, $path); wp_update_attachment_metadata($attachId, $attachData); set_post_thumbnail($postId, $attachId); } return $result; }, 10, 2); |
add_filter('quform_post_process_1', function (array $result, Quform_Form $form) { $title = $form->getValue('quform_1_3'); $content = $form->getValue('quform_1_4'); $post = array( 'post_title' => $title, 'post_content' => $content, 'post_type' => 'post', 'post_status' => 'publish' ); $postId = wp_insert_post($post); // Add attachment $file = $form->getValue('quform_1_5'); if (isset($file[0])) { $file = $file[0]; $filename = $file['name']; $path = $file['path']; $wpFiletype = wp_check_filetype($filename); $attachment = array( 'guid' => $file['url'], 'post_mime_type' => $wpFiletype['type'], 'post_title' => preg_replace('/\.[^.]+$/', '', $filename), 'post_content' => '', 'post_status' => 'inherit' ); $attachId = wp_insert_attachment($attachment, $path, $postId); require_once ABSPATH . 'wp-admin/includes/image.php'; $attachData = wp_generate_attachment_metadata($attachId, $path); wp_update_attachment_metadata($attachId, $attachData); set_post_thumbnail($postId, $attachId); } return $result; }, 10, 2);