Creación de páginas a partir de datos de formulario Ninja

5 minutos de lectura

avatar de usuario
Steve

Creé una página de WordPress con un formulario Ninja que recopila datos diversos sobre un producto, incluidas algunas imágenes cargadas. Se puede acceder a la página con el formulario desde el menú principal haciendo clic en el elemento “Entrada”, por lo que el usuario no necesita acceder al backend para cargar los datos de su producto.

Ahora quiero poner estos datos en un tipo de publicación personalizada llamada “Listado”. Eventualmente habrá miles de estos conjuntos de datos y, por lo tanto, miles de páginas de “Lista”, a medida que las personas ingresen al sitio, haga clic en Entrada en el menú principal para llegar a la página con el formulario Ninja y completarlo.

¿Alguien podría decirme cómo harían ahora para construir estas páginas de listado a partir de los datos que ha recopilado el formulario?

Estoy ejecutando la opción Front-End Post de Ninja que supuestamente creará una página a partir de los datos del formulario. Este complemento tiene algunas configuraciones de creación de publicaciones donde puede seleccionar el tipo de publicación para crear, pero esto no funciona para mí. Espero que los datos del formulario enviado aparezcan en el panel | Listings, pero no hay nada allí después de enviar el formulario.

¿Alguien ha conseguido que esto funcione?

Gracias por tu ayuda.

Creo que solo puede usar formularios Ninja sin extensiones y conectarse directamente a ‘ninja_forms_after_submission’ que se activa después del envío y le permite usar los datos enviados y realizar acciones.

Esta es una base de código de inicio para lograr su resultado, pero debe personalizarse según sus necesidades y la estructura de su formulario.

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 );

}

Este código debe copiarse en el archivo functions.php

No probado por supuesto.

Buena suerte 😉

La extensión de publicación de front-end de Ninja Forms no está realmente diseñada para mostrar datos de envío de formularios en el front-end.

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

“La extensión de publicación front-end de Ninja Forms le brinda el poder del editor de publicaciones de WordPress en cualquier página visible públicamente que elija”.

Si desea mostrar los datos de envío de Ninja Forms en la interfaz, deberá recuperarlos de la base de datos con código en functions.php o escribiendo un complemento (recomendado). Luego podría analizarlos y manipularlos y crear un código abreviado que le permitiría insertar fácilmente sus datos de envío formateados en publicaciones o páginas de WordPress.

Aquí hay un enlace a una solicitud de función, solicitando lo mismo. El autor de esa solicitud publicó un enlace a un complemento (haga clic en Descargar como complemento) que escribió y que puede hacer lo que desea o brindarle más información sobre cómo podría implementarlo.

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

Si no le importa pagar un poco de dinero por un complemento, le recomendaría usar formas de gravedad en lugar de formas ninja para cosas más avanzadas como esta.

Creé manualmente un tipo de publicación personalizada “oproep” y usé un complemento de formas de gravedad para crear una publicación personalizada del tipo oproep cuando un usuario envía el formulario.

Debido a que utiliza páginas de archivo de tipo de publicación personalizada, www.mysite.com/oproep se creará automáticamente para que ya tenga una lista de “Listados”. Las páginas individuales www.mysite.com/oproep/title también se crearán para usted de forma predeterminada, también puede anular estas plantillas si lo desea según su tema.

Lo único que tiene que hacer es agregar algunas líneas php a su functions.php (o escribir su propio complemento) que agregue el tipo de publicación personalizada. El resto todo funciona automáticamente.

Llegué a escribir código para que los usuarios pudieran editar sus envíos, leer etiquetas de taxonomía personalizadas en menús desplegables, etc. Obtuviste muchas más opciones usando formularios de gravedad.

  • esto no De Verdad responde la pregunta, que se refiere específicamente a la plataforma Ninja. Puede ser más adecuado como un comentario.

    –Marshall Davis

    2 mayo 2017 a las 18:27

La respuesta de FrancescoCarlucci es correcta, pero solo agrega un comentario adicional: en caso de que desee especificar por ID de campo de formulario qué campos deben ir en su publicación, NinjaForms pasa la ID como un número (en mi caso, por ejemplo, necesitaba el campo 136 para el título de mi publicación). Puede haber sido obvio, pero me estrujé el cerebro por un tiempo hasta que lo descubrí.

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);

}

¿Ha sido útil esta solución?