✅ Noticias, temas, complementos de WEB y WordPress. Aquí compartimos consejos y las mejores soluciones para sitios web.

Crear contenido programáticamente a partir de entradas de formularios de gravedad

10

Esta publicación lo guiará sobre cómo crear cualquier tipo de contenido (usuarios, publicaciones o algo más personalizado) basado en entradas en un formulario de Gravity Forms. Agregaremos un área en la pantalla de detalles de entrada en el administrador para crear contenido basado en la información enviada.

que haremos

Crearemos un nuevo metabox en la pantalla de detalles de entrada de Gravity Form. En este metabox agregaremos un botón. La idea es que el usuario final pueda revisar la entrada y, si aprueba los detalles de la entrada, puede presionar el botón para activar la creación de contenido.

Crear contenido programáticamente a partir de entradas de formularios de gravedad

Nuestro código se activará al hacer clic en este botón, realizar la acción necesaria y, opcionalmente, presentaremos un mensaje del resultado al usuario final. También (opcionalmente) agregaremos metadatos a la entrada para que podamos verificar fácilmente si el contenido se ha creado a partir de esta entrada antes o no.

Mantendré el código bastante simple y general para que pueda sustituirlo y modificarlo fácilmente para que se ajuste a las necesidades de su proyecto. En el siguiente ejemplo, supondré que queremos crear un usuario programáticamente. Pero lo que haga con los detalles de la entrada depende completamente de usted; puede crear una publicación, actualizar algún otro contenido o enviar un correo electrónico personalizado si lo desea.

identificando los campos

La primera consideración que tenemos que hacer es cómo identificar los campos. En otras palabras, necesitamos saber qué campo es qué. Tenga en cuenta que los valores de una entrada en Gravity Forms se refieren a sus ID de campo de formulario. E incluso con acceso a la información de cada campo de formulario, necesitamos una forma segura de saber qué campos son qué información. Un formulario puede constar de cuatro entradas de texto: necesitamos saber cuál de las cuatro entradas de texto son para el nombre.

Tienes algunas alternativas aquí. Puede codificar los ID de campo (por ejemplo, determinar que el ID de campo 2 es el apellido), pero esto es muy propenso a errores y no se recomienda. Una forma sencilla es usar una de las entradas de información de campo existentes en Gravity Forms, por ejemplo, el nombre de la clase CSS. Pero tenga en cuenta que el usuario final puede proporcionar varios nombres de clase para obtener el estilo que desea, y su código puede romperse fácilmente si no está analizando correctamente esta cadena. La forma en que definitivamente recomiendo es agregar sus propias entradas personalizadas a los campos:

Si desea un método sólido para identificar campos para su código, definitivamente consulte cómo en la publicación anterior. Pero para mantenerlo simple en esta publicación, usaré la clase CSS y asumiré que el usuario no ingresa nada más que los valores que necesitamos en esta área.

Configurando el formulario

El primer paso es, naturalmente, configurar el formulario con los campos y tipos de campo que necesita. Y luego inserta los identificadores de campo en sus lugares correctos. Como ejemplo tengo este formulario:

Crear contenido programáticamente a partir de entradas de formularios de gravedad

Y para cada campo que quiero incluir, proporciono una clase de CSS personalizada a la que puedo apuntar en mi código. Por ejemplo, para el nombre;

Crear contenido programáticamente a partir de entradas de formularios de gravedad

Ahora pasemos al código y a cómo crear una funcionalidad que convierta los envíos en contenido personalizado.

Agregar un metabox en los detalles de la entrada

El primer paso es agregar algún tipo de desencadenante de acción para crear nuestro contenido personalizado. Un lugar natural está en la pantalla de detalles de entrada. Esto permite al usuario final revisar los valores enviados y luego decidir si crear o no contenido a partir de ellos. Gravity Forms permite a los desarrolladores crear fácilmente metaboxes personalizados en estas pantallas.

Para crear un metabox personalizado para ingresar detalles, podemos usar el filtro gform_entry_detail_meta_boxes. Es un filtro que devuelve una matriz de todos los metaboxes para mostrar los detalles de entrada. Simplemente agregamos un nuevo elemento de matriz para crear un nuevo metabox y definimos una función de devolución de llamada para representar su contenido. Establecemos un buen título descriptivo en ‘ title‘ y definimos su posición para que aparezca en ‘ side‘.

Y luego necesitamos definir la función de devolución de llamada: awp_gf_create_user_metabox_render()en nuestro código. Esta función es responsable de representar el contenido del metabox. Como parámetro de esta función, obtenemos una serie de argumentos, en los que podemos obtener el formulario y el objeto de entrada;

function awp_gf_create_user_metabox_render($args) { $form = $args['form']; // Form array. Here we find all the fields in $form['fields'] $entry = $args['entry']; // Entry array. Here we find all values in this current submission $render = ''; echo $render; }

Todo lo que tenemos que hacer en esta función es construir algo de HTML y repetirlo.

En cuanto a agregar un botón para activar una acción, seguiremos el mismo método que lo hace Gravity Forms. Hay un elemento de formulario que envuelve toda la pantalla de detalles de entrada, y todo lo que tenemos que hacer es agregar un evento onclick en un botón de envío que cambiará la actionpropiedad ‘ ‘. Definimos nuestro propio nombre de acción personalizado, para que sepamos cuándo se ha activado, y no entra en conflicto con las acciones de Gravity Forms.

Llamemos a nuestra acción personalizada ‘ awp_gf_create_user‘ y representemos un botón de envío con un evento onclick así:

Con el código anterior, obtendremos un nuevo metabox en el costado de la pantalla de detalles de entrada, con este aspecto:

Crear contenido programáticamente a partir de entradas de formularios de gravedad

Ahora mismo no pasa nada al hacer clic en el botón. Eso es solo porque aún no hemos escrito ningún código para escucharlo.

Extraer valores de la entrada

Como se mencionó anteriormente, todos los valores enviados en la matriz de entrada se identifican por sus ID de campo.

Crear contenido programáticamente a partir de entradas de formularios de gravedad

En la imagen de arriba, el campo ID 1 es para el nombre, ID 2 es el apellido y así sucesivamente. Pero espera, ¿qué está pasando con 5.1, 5.3 y demás? En Gravity Forms obtenemos "sub-ID" para un campo especial que acepta múltiples valores. Agregué un campo de dirección a mi formulario que es un campo, pero múltiples entradas. Cada entrada dentro de este campo obtiene sus propias ID, adjuntas a la ID principal y un punto. Si no usa ninguno de estos campos de entrada múltiple, ¡genial! El código se vuelve realmente simple. Pero he incluido este campo especial para que podamos ver cómo acceder a él.

En este momento, nuestro problema es que el código no sabe para qué son los ID de campo 1, 2 o 3. Esa información se encuentra en la matriz de formularios, más específicamente en el $form['fields']elemento. Este elemento contiene todos los campos del formulario y tenemos acceso completo a cada objeto de campo. Es aquí donde podemos encontrar nuestro método de identificación elegido; cssClassen mi ejemplo

Simplemente podemos recorrer estos campos y buscar los identificadores que queremos extraer. Pondré todos mis identificadores en una matriz y simplemente podemos verificar si un campo en el bucle es uno de estos.

Pero primero necesitamos saber que se hizo clic en el botón. Esto es bastante simple; simplemente podemos verificar si nuestra acción personalizada reside en la $_POSTmatriz. Pero debido a que estamos trabajando con Gravity Forms, podemos usar [rgpost](https://docs.gravityforms.com/rgpost/)(). La función Gravity Forms rgpost()simplemente devuelve el valor de una solicitud POST. Comprobando rgpost('awp_gf_create_user')y $_POST['awp_gf_create_user']es exactamente lo mismo. Pero usaremos la función de Gravity Forms.

En línea #8definimos una matriz con todos los identificadores personalizados que deseamos buscar. Estos son todos los valores que ingresé como clase CSS en mi formulario. Luego, en el ciclo de cada campo, verificamos si el campo es uno de estos identificadores. En mi ejemplo, estoy usando la clase CSS para identificar campos, pero recomiendo usar entradas personalizadas. Este código tampoco funcionará si se dieron varias clases de CSS.

Luego, en la línea #12, agregamos un nuevo elemento a nuestra matriz de valores finales con el identificador como clave. Luego usamos la ID del campo y hacemos referencia a la matriz de entrada. Al final de este ciclo $values, debe completarse con los valores enviados que sean relevantes. Se excluirán todos los campos que se hayan dejado vacíos o que no se hayan incluido en la matriz de identificadores.

Si agregó un campo de entrada múltiple especial, deberá agregar un código adicional para hacer referencia correctamente a las subID. Sé que awp_addresses un tipo de campo de dirección. Los tipos de campo de dirección en Gravity Forms siguen un patrón fijo de subID, y solo he habilitado tres de las entradas posibles (la dirección de calle 1 tiene subID 1, el código postal tiene subID 3 y la ciudad tiene subID 5). Para manejar este tipo de campos, necesitamos hacer algo como esto:

En la línea #4, concateno todos los valores para que la cadena final tenga un formato de dirección estandarizado de una línea (",").

Ahora tenemos todos los valores necesarios bien ordenados por claves de identificación en la matriz $values. Lo que haga con esto depende totalmente de usted y de las necesidades de su proyecto. Pero incluiré un ejemplo de cómo crear un usuario en WordPress.

Creación de un nuevo usuario a partir del envío de la entrada

Para mantener limpio mi código, llamaré a una función separada que es responsable de crear un nuevo usuario. Todo lo que necesito es pasar la matriz de valores. Quiero que esta función devuelva algún tipo de indicación del resultado de esta acción. De esta manera, puedo crear un mensaje independientemente de si el usuario se creó correctamente o si ya existe un usuario con el correo electrónico proporcionado.

Entonces simplemente definimos la awp_gf_create_user()función. Incluiré un ejemplo simple de cómo crear un usuario mediante programación en WordPress. Esto simplemente pretende ser un ejemplo para mostrar cómo usar los valores extraídos.

Primero verificamos si existe un usuario con el correo electrónico dado con [get_user_by](https://developer.wordpress.org/reference/functions/get_user_by/)(). Si no, usamos [wp_insert_user](https://developer.wordpress.org/reference/functions/wp_insert_user/)()para agregar un usuario. También he incluido un ejemplo de almacenamiento de metadatos de usuario personalizados (nuestro campo de dirección). Finalmente, nuestro método debería devolver el resultado de la creación del usuario. Si el usuario ya existía, devolvemos -1. De lo contrario, devolvemos el ID de usuario.

De vuelta en nuestro procesamiento de metabox, ahora podemos agregar condicionalmente un mensaje al usuario final en función del resultado de esto. Este es un ejemplo simple; si el valor devuelto fue -1, ya existe un usuario con el correo electrónico proporcionado. Y si el valor devuelto fue mayor que 0, sabemos que creó un usuario con éxito. Por lo tanto, aparece un mensaje que dice que la creación del usuario fue exitosa.

Evitar contenido duplicado

El ejemplo simple anterior deshabilitará hereditariamente la creación de múltiples usuarios desde la misma entrada porque verifica si ya existe un usuario con la dirección de correo electrónico proporcionada. Pero en otros casos es posible que no tenga esta oportunidad. Entonces, otra estrategia para evitar que los usuarios finales creen contenido duplicado desde la misma entrada es agregar meta de entrada personalizada. En otras palabras; si la acción fue exitosa, agregamos un meta personalizado a esa entrada. Y luego simplemente verificamos si ese meta personalizado existe antes de comenzar la acción.

Gravity Forms ofrece métodos para agregar metadatos personalizados a las entradas; [gform_add_meta](https://docs.gravityforms.com/gform_add_meta/)()así como obtener valores: [gform_get_meta](https://docs.gravityforms.com/gform_get_meta/)().

En línea #4buscamos nuestra meta de entrada personalizada. Si existiera (no vacío), configuramos un mensaje que informa al usuario final que él o ella ya ha intentado crear contenido desde esta entrada antes. Si el meta personalizado no existía, continuamos creando nuestro contenido. Cuando el contenido se creó con éxito, debemos agregar el meta personalizado a la entrada (línea #10).

Conclusión y código final

En este post he intentado dar un ejemplo de cómo crear contenido a partir de una entrada en Gravity Forms. Los ejemplos de código están destinados a darle una idea de cómo personalizarlo y cambiarlo para que se ajuste a las necesidades de su proyecto. Definitivamente recomiendo expandir esta funcionalidad para manejar mejor los mensajes de error. También es posible que desee agregar solo este metabox para formularios específicos. Pero esto debería ser una buena base para construir.

Y aquí está el código final:

Fuente de grabación: awhitepixel.com

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More