Creating pages from Ninja form data

I’ve created a WordPress page with a Ninja form on it that collects miscellaneous data about a product, including some uploaded images. The page with the form is accessible from the main menu by clicking the “Input” item, so the user doesn’t need to access the backend to upload their product data.

I now want to put this data into a custom post type called “Listing.” There will eventually be thousands of these data sets and so thousands of “Listing” pages, as people come to the site, click Input in the main menu to get to the page with the Ninja form and fill it out.

Read More

Could someone tell me how they would go about now building these listing pages from the data the form has collected?

I’m running Ninja’s Front-End Post option which supposedly will create a page from the form data. This plugin has some Post creation settings where you can select the post type to create, but this isn’t working for me. I would expect the submitted form data to show up under dashboard | Listings, but there’s nothing there after submitting the form.

Has anyone gotten this to work?

Thanks for your help.

Related posts

4 comments

  1. I think you can use only Ninja Forms without extensions, and hook directly in ‘ninja_forms_after_submission’ that fires after submission and allow you to use data submitted and perform actions.

    This is a starter codebase to achieve your result, but needs to be customized on your needs and your form structure.

    add_action( 'ninja_forms_after_submission', 'create_page_from_ninjaform' );
    function create_page_from_ninjaform( $form_data ){
    
        // your fields data
        $form_fields = $form_data[ 'fields' ];
    
        // !!! this is an example, it depends form fields in your form
        $title = $form_fields[ 1 ][ 'value' ];
        $content = $form_fields[ 2 ][ 'value' ];
        $sample_meta_field = $form_fields[ 3 ][ 'value' ];
    
        $new_post = array(
            'post_title' => $title,
            'post_content' => $content,
            'post_status' => 'publish',
            'post_type' => 'listing', // be sure this is the post type name
        );
    
        $new_post_id = wp_insert_post( $new_post );
    
        update_post_meta( $new_post_id, 'your_meta_key', $sample_meta_field );
    
    }
    

    This code should be copied in functions.php file

    Not tested of course.

    Good luck 😉

  2. The Ninja Forms Front-end Posting extension isn’t really meant for displaying form submission data on the front end.

    From: https://ninjaforms.com/extensions/front-end-posting/

    “The Ninja Forms Front-end Posting extension gives you the power of the WordPress post editor on any publicly viewable page you choose.”

    If you want to show Ninja Forms submission data on the front end, you will have to retrieve them from the database with code in functions.php or by writing a plugin (recommended). You could then parse and manipulate them and create a shortcode that would allow you to insert your formatted submission data easily in WordPress posts or pages.

    Here’s a link to a feature request, asking for the same thing. The author of that request posted a link to a plugin (click Download as Plugin) they wrote which may do what you want or give you further insights as to how you could implement this.

    https://github.com/wpninjas/ninja-forms/issues/892

  3. If you do not mind paying a little money for a plugin I would recommend using gravity forms rather then ninja forms for more advanced stuff like this.

    I manually create a custom post type “oproep” and used a gravityforms plugin to create a custom post from type oproep when an user submits the form.

    Because you use custom post type archive pages http://www.mysite.com/oproep will be automatically created so you already have a list of “Listings”. The singe pages http://www.mysite.com/oproep/title will also be created for you by default, you could override these templates as well if you would like depending on your theme.

    The only thing you have to do is add a few php lines to your functions.php (or write your own plugin) that adds the custom post type. The rest all works automatically.

    I went so far as writing code to make users able to edit their submissions, read custom taxonomy tags in dropdowns etc. You got lots and lots of more options using gravity forms.

  4. FrancescoCarlucci’s answer is correct, but just adding an additional comment: in case you want to specify by form field IDs which fields should go where in your post, NinjaForms passes the ID as a number (in my case for example, I needed field 136 for my post title). It may have been obvious but I racked my brain for a while until I figured it out.

    function create_post($form_data) {
    
        $form_fields   =  $form_data[ 'fields' ];
    
        $post_fields = array(
            'post_content' => '',
            'post_content_filtered' => '',
            'post_title' => '',
            'post_excerpt' => '',
            'post_status' => 'pending',
            'post_type' => 'post',
        );
    
        foreach ($form_fields as $field) {
    
            $field_id    = $field[ 'id' ];
          $field_key   = $field[ 'key' ];
          $field_value = $field[ 'value' ];
    
          if ($field_id == 136) {
            $post_fields['post_title'] = $field_value;
          }
        }
    
        wp_insert_post($post_fields, true);
    
    }
    

Comments are closed.