Atenção!

Este artigo contém código PHP e destina-se a desenvolvedores. Oferecemos este código como uma cortesia, mas não fornecemos suporte para personalizações de código ou desenvolvimento de terceiros.

Para orientação extra, consulte o tutorial do WPBeginner sobre como adicionar código personalizado.

Dispensar

Como Armazenar Valores de Caixas de Seleção como Arrays com Submissões Post

Introdução

Gostaria de armazenar os valores de Checkbox como arrays para o seu formulário Envio de Posts em um campo personalizado criado a partir do plugin Advanced Custom Fields? Com um pequeno trecho de PHP, você pode armazenar esses valores em um array para seus campos personalizados.

Por padrão, quando os campos personalizados são mapeados no addon Envio de Posts, o WPForms armazena os dados no campo personalizado no mesmo formato em que o WPForms armazena os dados em todos os formulários.

Um exemplo para campos de formulário Checkbox (e qualquer coisa com múltiplos valores), o WPForms armazena os valores como uma única string, com cada valor em uma nova linha.

Vermelho
Verde
Azul

No entanto, com um pequeno trecho de PHP, você pode facilmente mudar isso para que seja armazenado como um array.

array( 'Vermelho', 'Verde', 'Azul')

Criando Seus Campos Personalizados

Primeiro, vamos criar um campo personalizado para nossos posts usando o plugin Advanced Custom Fields.

Se precisar de mais informações sobre como configurar campos personalizados, consulte este artigo.

Lembre-se ao configurar seus campos ACF, eles devem ser do mesmo tipo. Se você criar um campo personalizado para um checkbox, certifique-se de que o campo do formulário também seja um checkbox.

crie seus campos personalizados em seu post

Criação do Formulário

Agora é hora de criar seu formulário de envio de posts e adicionar um campo Checkbox ao formulário.

adicione um campo de checkbox ao seu formulário

Se precisar de alguma ajuda para configurar um formulário de envio de posts, consulte esta documentação.

Depois de adicionar os campos restantes ao seu formulário, vá para a aba Configurações e clique em Envio de Posts para garantir que seu campo personalizado esteja mapeado corretamente.

certifique-se de mapear todos os campos personalizados na aba Post Submissions do seu construtor de formulários

Adicionando o Trecho para Armazenar Valores como Arrays

Para armazenar os valores como um array, você só precisará copiar este trecho para o seu site.

Se precisar de ajuda para adicionar trechos ao seu site, consulte este tutorial.

/**
 * Turn checkbox values into an array.
 *
 * @link https://wpforms.com/developers/how-to-store-checkbox-values-as-arrays-with-post-submissions/
 */
  
function wpf_dev_post_submission_process_meta( $field_value, $meta_key, $field_id, $fields, $form_data ) {
 
    // Only run on my form with ID = 443
    if ( absint( $form_data[ 'id' ] ) !== 443 ) {
            return;
    } 
      
    // The $meta_key name is the same name that shows in the Field Name on Advanced Custom Fields
    if ( $meta_key === 'have_visited' ) {
 
            $field_value = explode( "\n", $field_value );
 
        }
  
    return $field_value;
}
add_filter( 'wpforms_post_submissions_process_meta', 'wpf_dev_post_submission_process_meta', 10, 5 );

Observação: É importante notar aqui que na tela de entradas do WPForms e no campo meta ao editar o post, você ainda verá um checkbox. É apenas quando você exibe os valores que ele mostrará como um array (em uma única linha) e mostraremos isso na próxima etapa. Lembre-se também de atualizar o ID do formulário de 443 para corresponder ao seu próprio ID de formulário. Se precisar de ajuda para encontrar o ID do seu formulário, consulte esta documentação útil.

Exibindo os Valores

Agora é hora de exibir esses valores no seu modelo de post único. O WPForms nunca recomenda fazer alterações ao vivo no seu tema, então é melhor usar um tema filho ou uma função personalizada para exibir isso no seu modelo.

Para mais informações sobre como criar um tema filho, dê uma olhada neste excelente artigo de nossos amigos da WPBeginner.

exiba os valores como arrays em seu modelo de post único
<div class="states_wrapper">
    <?php if( get_field('have_visited') ): ?> 
        <p>I've already visited these states in the last 5 years: <?php the_field('have_visited'); ?></p> 
    <?php endif; ?>
</div>

Para fins deste tutorial, criamos nosso tema filho e em single.php adicionamos esta linha de código para primeiro garantir que os valores estejam lá e, se estiverem, exibi-los.

Quando seu post for exibido, você verá os estados listados em formato de parágrafo em vez de uma exibição linha por linha.

agora seus valores de checkbox serão mostrados em uma única linha

E é isso! Você alterou com sucesso como esses valores são armazenados no banco de dados do seu WordPress. Você gostaria de usar imagens para os rótulos do seu campo de formulário Checkbox em vez de texto? Dê uma olhada em nosso artigo sobre Como Aplicar Imagens aos Rótulos de Checkbox Usando CSS.

Referência de Filtro: wpforms_post_submissions_process_meta

Perguntas Frequentes

R: Posso usar isso em outros add-ons também?

R: Com certeza! Por exemplo, se você pegar o mesmo cenário mencionado neste tutorial, você poderia adicionar isso ao add-on de Registro de Usuário para que ele seja salvo automaticamente na página de perfil do usuário enquanto usa o ACF para adicionar mais informações ao Perfil de Usuário do WordPress.

Na versão 2.8.0 e mais recentes do add-on de Registro de Usuário, o filtro para armazenar valores de meta personalizados é:

wpforms_user_registration_process_base_custom_meta_value

Observação: Em versões mais antigas (antes do Registro de Usuário 2.8.0), este filtro era chamado:

wpforms_user_registration_process_registration_custom_meta_value

Se você estiver mantendo um site legado, pode manter ambos os hooks para compatibilidade com versões anteriores.

/**
 * Turn checkbox values into an array with the User Registration addon.
 *
 * @link https://wpforms.com/developers/how-to-store-checkbox-values-as-arrays-with-post-submissions/
 */
function wpf_dev_user_submission_process_meta( $field_value, $meta_key = '', $field_id = 0, $field = array(), $form_data = array() ) {

	// The $meta_key name is the same name that shows in the Field Name on Advanced Custom Fields.
	if ( $meta_key === 'have_visited' ) {
		$field_value = explode( "\n", $field_value );
	}

	return $field_value;
}

// User Registration addon 2.8.0+.
add_filter( 'wpforms_user_registration_process_base_custom_meta_value', 'wpf_dev_user_submission_process_meta', 10, 5 );

// Backward compatibility for older versions (before 2.8.0).
add_filter( 'wpforms_user_registration_process_registration_custom_meta_value', 'wpf_dev_user_submission_process_meta', 10, 5 );

É isso! Agora seus valores de checkbox enviados serão salvos como um array quando o WPForms os mapear para o seu campo de meta de post personalizado.

Gostaria de aprender mais sobre como configurar o Post Submissions, incluindo o mapeamento de campos de Meta de Post Personalizados, em nosso guia do add-on Post Submissions.