✅ Notícias, temas e plug-ins da WEB e do WordPress. Aqui compartilhamos dicas e as melhores soluções para sites.

Criar conteúdo programaticamente a partir de entradas de formulários de gravidade

13

Este post irá guiá-lo em como criar qualquer tipo de conteúdo (usuários, posts ou qualquer outra coisa personalizada) com base em entradas em um formulário Gravity Forms. Adicionaremos uma área na tela de detalhes da entrada no admin para criar conteúdo com base nas informações enviadas.

O que vamos fazer

Criaremos uma nova metabox na tela de detalhes de entrada do Gravity Form. Nesta metabox adicionaremos um botão. A ideia é que o usuário final possa revisar a entrada e, se aprovar os detalhes da entrada, pode pressionar o botão para acionar a criação de conteúdo.

Criar conteúdo programaticamente a partir de entradas de formulários de gravidade

Nosso código será acionado ao clicar neste botão, realizar a ação necessária e, opcionalmente, apresentaremos uma mensagem do resultado ao usuário final. Também adicionaremos (opcionalmente) metadados à entrada para que possamos verificar facilmente se o conteúdo foi criado a partir dessa entrada antes ou não.

Manterei o código bastante simples e geral para que você possa substituí-lo e ajustá-lo facilmente para atender às necessidades do seu projeto. No exemplo abaixo, assumirei que queremos criar programaticamente um usuário. Mas o que você faz com os detalhes da entrada depende inteiramente de você; você pode criar uma postagem, atualizar algum outro conteúdo ou enviar um e-mail personalizado, se desejar.

Identificando os campos

A primeira consideração que temos que fazer é como identificar os campos. Em outras palavras, precisamos saber qual campo é o quê. Tenha em mente que os valores de uma entrada no Gravity Forms são referidos aos seus IDs de campo de formulário. E mesmo com acesso às informações de cada campo do formulário – precisamos de uma maneira infalível de saber quais campos são quais informações. Um formulário pode consistir em quatro entradas de texto – precisamos saber quais das quatro entradas de texto são para o primeiro nome.

Você tem algumas alternativas aqui. Você pode codificar os IDs de campo (por exemplo, determinar que o ID de campo 2 é o sobrenome), mas isso é muito propenso a erros e não é recomendado. Uma maneira simples é usar uma das entradas de informações de campo existentes no Gravity Forms, por exemplo, o nome da classe CSS. Mas lembre-se de que o usuário final pode fornecer vários nomes de classe para obter o estilo que deseja, e seu código pode quebrar facilmente se você não estiver analisando corretamente essa string. A maneira que eu definitivamente recomendo é adicionar suas próprias entradas personalizadas aos campos:

Se você deseja um método sólido para identificar campos para o seu código, confira como no post acima. Mas para simplificar neste post, vou usar a classe CSS e assumir que o usuário não insere nada além dos valores que precisamos nesta área.

Configurando o formulário

O primeiro passo é naturalmente configurar o formulário com os campos e tipos de campo que você precisa. E então você insere os identificadores de campo em seus lugares corretos. Como exemplo tenho este formulário:

Criar conteúdo programaticamente a partir de entradas de formulários de gravidade

E para cada campo que desejo incluir, forneço uma classe CSS personalizada que posso direcionar no meu código. Por exemplo, para primeiro nome;

Criar conteúdo programaticamente a partir de entradas de formulários de gravidade

Agora vamos passar para o código e como criar uma funcionalidade que converte envios em conteúdo personalizado.

Adicionando uma metabox nos detalhes da entrada

O primeiro passo é adicionar algum tipo de gatilho de ação para criar nosso conteúdo personalizado. Um lugar natural está na tela de detalhes da entrada. Isso permite que o usuário final revise os valores enviados e, em seguida, decida se deseja ou não criar conteúdo a partir dele. O Gravity Forms permite que os desenvolvedores criem facilmente metaboxes personalizadas nessas telas.

Para criar uma metabox personalizada para os detalhes da entrada, podemos usar o filtro gform_entry_detail_meta_boxes. É um filtro que retorna uma matriz de todas as metaboxes para mostrar nos detalhes da entrada. Simplesmente adicionamos um novo elemento de array para criar uma nova metabox e definimos uma função de retorno de chamada para renderizar seu conteúdo. Colocamos um bom título descritivo em ‘ title‘ e definimos sua posição para aparecer no ‘ side‘.

E então precisamos definir a função callback: awp_gf_create_user_metabox_render()em nosso código. Esta função é responsável por renderizar o conteúdo da metabox. Como parâmetro para esta função obtemos um array de argumentos, no qual podemos buscar o formulário e o 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; }

Tudo o que precisamos fazer nesta função é construir um pouco de HTML e ecoá-lo.

Quanto a adicionar um botão para acionar uma ação, seguiremos o mesmo método que o próprio Gravity Forms faz. Há um elemento de formulário envolvendo toda a tela de detalhes da entrada, e tudo o que precisamos fazer é adicionar um evento onclick em um botão de envio que alterará a actionpropriedade ‘ ‘. Definimos nosso próprio nome de ação personalizado, para que saibamos quando ele foi acionado – e não entre em conflito com as ações do Gravity Forms.

Vamos chamar nossa ação personalizada ‘ awp_gf_create_user‘ e renderizar um botão de envio com um evento onclick assim:

Com o código acima, obteremos uma nova metabox na lateral da tela de detalhes da entrada, assim:

Criar conteúdo programaticamente a partir de entradas de formulários de gravidade

Agora nada acontece ao clicar no botão. Isso é porque ainda não escrevemos nenhum código para ouvi-lo.

Extraindo valores da entrada

Conforme mencionado anteriormente, todos os valores enviados na matriz de entrada são identificados por seus IDs de campo.

Criar conteúdo programaticamente a partir de entradas de formulários de gravidade

Na imagem acima o campo ID 1 é para nome, ID 2 é sobrenome e assim por diante. Mas espere – o que está acontecendo com 5.1, 5.3 e assim por diante? No Gravity Forms, obtemos "sub-IDs" para campos especiais que aceitam vários valores. Adicionei um campo de endereço ao meu formulário que é um campo, mas várias entradas. Cada entrada nesse campo recebe seus próprios IDs, anexados ao ID principal e um ponto final. Se você não usa nenhum desses campos de múltiplas entradas, ótimo! O código fica bem simples. Mas incluí este campo especial para que possamos ver como acessá-lo.

No momento, nosso problema é que o código não sabe para que serve o ID de campo 1, 2 ou 3. Essa informação está no array de formulário, mais especificamente no $form['fields']elemento. Este elemento contém todos os campos do formulário e temos acesso total a cada objeto de campo. É aqui que podemos encontrar o método de identificação escolhido; no meu exemplo cssClass.

Podemos simplesmente percorrer esses campos e procurar os identificadores que queremos extrair. Vou colocar todos os meus identificadores em um array e podemos simplesmente verificar se um campo no loop é um desses.

Mas primeiro precisamos saber que o botão foi clicado. Isso é bem simples; podemos simplesmente verificar se nossa ação personalizada reside no $_POSTarray. Mas como estamos trabalhando com Gravity Forms podemos usar [rgpost](https://docs.gravityforms.com/rgpost/)(). A função Gravity Forms rgpost()simplesmente retorna o valor de uma solicitação POST. Verificando rgpost('awp_gf_create_user')e $_POST['awp_gf_create_user']é exatamente o mesmo. Mas vamos usar a função Gravity Forms.

Na linha #8definimos um array com todos os identificadores personalizados que desejamos pesquisar. Estes são todos os valores que eu inseri como classe CSS no meu formulário. Então, no loop de cada campo, verificamos se o campo é um desses identificadores. No meu exemplo estou usando a classe CSS para identificar campos, mas recomendo usar entradas personalizadas. Este código também não funcionará se várias classes CSS forem fornecidas.

Então, na linha #12, adicionamos um novo elemento ao nosso array de valores finais com o identificador como chave. Em seguida, usamos o ID do campo e referenciamos a matriz de entrada. No final deste loop $valuesdeve ser preenchido com quaisquer valores enviados que sejam relevantes. Quaisquer campos que foram deixados em branco ou não incluídos no array identificador serão excluídos.

Se você adicionou um campo de entrada múltiplo especial, precisará adicionar algum código extra para referenciar adequadamente os sub-IDs. Eu sei que awp_addressé um tipo de campo de endereço. Os tipos de campo de endereço no Gravity Forms seguem um padrão fixo de sub IDs e eu habilitei apenas três das entradas possíveis (endereço 1 tem sub ID 1, código postal tem sub ID 3 e Cidade tem sub ID 5). Para lidar com esses tipos de campos, precisamos fazer algo assim:

Na linha #4eu concateno todos os valores para que a string final seja um formato padronizado de endereço de uma linha (“, “).

Agora temos todos os valores necessários bem ordenados por chaves identificadoras no array $values. O que você faz com isso depende inteiramente de você e das necessidades do seu projeto. Mas vou incluir um exemplo de criação de um usuário no WordPress.

Criando um novo usuário a partir do envio da entrada

Para manter meu código limpo, chamarei uma função separada responsável por criar um novo usuário. Tudo que eu preciso é passar o array de valores. Eu quero que esta função retorne algum tipo de indicação do resultado desta ação. Desta forma posso criar uma mensagem se o usuário foi ou não criado com sucesso ou se já existe um usuário com o email fornecido.

Então simplesmente definimos a awp_gf_create_user()função. Vou incluir um exemplo simples de criação de um usuário programaticamente no WordPress. Isso é simplesmente um exemplo para mostrar como usar os valores extraídos.

Primeiro, verificamos se existe um usuário com o e-mail fornecido com [get_user_by](https://developer.wordpress.org/reference/functions/get_user_by/)(). Caso contrário, usamos [wp_insert_user](https://developer.wordpress.org/reference/functions/wp_insert_user/)()para adicionar um usuário. Também incluí um exemplo de armazenamento de meta de usuário personalizado (nosso campo de endereço). Finalmente nosso método deve retornar o resultado da criação do usuário. Se o usuário já existia, retornamos -1. Caso contrário, retornamos o ID do usuário.

De volta à nossa metabox render, agora podemos adicionar condicionalmente uma mensagem ao usuário final com base no resultado disso. Este é um exemplo simples; se o valor retornado for -1, já existe um usuário com o email fornecido. E se o valor retornado for maior que 0, sabemos que criou um usuário com sucesso. Assim, solicitamos uma mensagem informando que a criação do usuário foi bem-sucedida.

Evitando conteúdo duplicado

O exemplo simples acima desabilitará por herança a criação de vários usuários da mesma entrada porque verifica se já existe um usuário com o endereço de e-mail fornecido. Mas em outros casos você pode não ter essa oportunidade. Portanto, outra estratégia para evitar que os usuários finais criem conteúdo duplicado da mesma entrada é adicionar meta de entrada personalizada. Em outras palavras; se a ação foi bem-sucedida, adicionamos uma meta personalizada a essa entrada. E então simplesmente verificamos se essa meta personalizada existe antes de iniciar a ação.

O Gravity Forms oferece métodos para adicionar meta personalizado às entradas; [gform_add_meta](https://docs.gravityforms.com/gform_add_meta/)()bem como buscar valores: [gform_get_meta](https://docs.gravityforms.com/gform_get_meta/)().

Na linha #4, buscamos nossa meta de entrada personalizada. Se existisse (não vazio), definimos uma mensagem informando ao usuário final que ele já tentou criar conteúdo a partir dessa entrada antes. Se a meta personalizada não existia, continuamos criando nosso conteúdo. Quando o conteúdo foi criado com sucesso, precisamos adicionar a meta personalizada à entrada (linha #10).

Conclusão e código final

Neste post tentei dar um exemplo de como criar conteúdo a partir de uma entrada no Gravity Forms. Os exemplos de código destinam-se a dar uma ideia de como personalizá-lo e alterá-lo para atender às necessidades do seu projeto. Definitivamente, recomendo expandir essa funcionalidade para lidar melhor com as mensagens de erro. Você também pode querer apenas adicionar esta metabox para um formulário específico. Mas esta deve ser uma boa base para construir.

E aqui está o código final:

Fonte de gravação: awhitepixel.com

Este site usa cookies para melhorar sua experiência. Presumiremos que você está ok com isso, mas você pode cancelar, se desejar. Aceitar Consulte Mais informação