Como armazenar valores de caixas de seleção como matrizes com envios de postagem

Introdução

Gostaria de armazenar os valores das caixas de verificação como arrays para o seu formulário de submissão de posts num meta-campo personalizado criado a partir do plugin Advanced Custom Fields? Com um pequeno snippet de PHP, pode armazenar estes valores numa matriz para os seus campos personalizados.

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

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

Red
Green
Blue

No entanto, com um pequeno snippet de PHP, pode facilmente alterar isto para que seja armazenado como um array.

array( 'Red', 'Green', 'Blue')

Criar os seus campos personalizados

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

Se precisar de mais informações sobre a configuração de campos personalizados, consulte este artigo.

Não se esqueça de que, ao configurar os seus campos ACF, deve ser igual a igual. Se criar um campo personalizado para uma caixa de verificação, certifique-se de que o campo do formulário também é uma caixa de verificação.

crie os seus campos personalizados na sua publicação

Criar o formulário

Agora é altura de criar o seu formulário de envio de mensagens e adicionar um campo Checkbox ao formulário.

adicionar um campo de caixa de verificação ao seu formulário

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

Depois de adicionar os restantes campos ao formulário, vá ao separador Definições e clique em Submissões de publicações para se certificar de que o campo personalizado está corretamente mapeado.

certifique-se de que mapeia todos e quaisquer campos personalizados no separador Submissões de publicações do seu criador de formulários

Adicionar o snippet para armazenar valores como arrays

Para armazenar os valores como uma matriz, basta copiar este snippet para o seu site.

Se precisar de ajuda para adicionar snippets 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 );

É importante notar aqui que no ecrã de entradas do WPForms e no campo meta enquanto edita o post, continuará a ver uma caixa de verificação. É apenas quando você ecoa os valores que ele será exibido como uma matriz (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 saber onde encontrar o seu ID de formulário, consulte esta documentação útil.

Visualização dos valores

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

Para obter mais informações sobre como criar um tema filho, consulte este excelente artigo dos nossos amigos da WPBeginner.

apresentar os valores como matrizes no seu modelo de publicação única

Para efeitos deste tutorial, criámos o nosso tema filho e, em single.php, adicionámos esta linha de código para nos certificarmos de que os valores estão lá e, se estiverem, para os mostrar.

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

Quando a sua publicação for apresentada, verá que os estados são listados num formato de parágrafo em vez de uma apresentação linha a linha.

agora os valores da caixa de verificação serão apresentados numa única linha

E pronto! Alterou com êxito a forma como estes valores são armazenados na sua base de dados do WordPress. Gostaria de utilizar também imagens para as etiquetas do campo de formulário Caixa de verificação em vez de texto? Dê uma vista de olhos ao nosso artigo sobre Como aplicar imagens a etiquetas de caixas de verificação utilizando CSS.

Referência do filtro: wpforms_post_submissions_process_meta

FAQ

R: Posso utilizar isto também noutras extensões?

R: Sem dúvida! Por exemplo, se utilizar o mesmo cenário mencionado neste tutorial, pode adicionar isto ao addon Registo de Utilizador para que seja automaticamente guardado na página de perfil do utilizador enquanto utiliza o ACF para adicionar mais informações ao Perfil de Utilizador do WordPress.

/**
 * 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, $fields, $form_data ) {
      
        // 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_user_registration_process_registration_custom_meta_value', 'wpf_dev_user_submission_process_meta', 10, 5 );

Repare como o nome do filtro é agora wpforms_user_registration_process_registration_custom_meta_value isto significa que, quando se cria um formulário de registo com o Registo do utilizador addon, esta informação será guardada no perfil do utilizador.