Frontend Form Checkbox Update ACF Field

Eu tenho um formulário de frente com texto, selecione e checkbox de seleção insere o texto e seleciona atualização e trabalhe bem, usando update_post_meta () no entanto, as checkboxs de seleção não estão atualizando. Como eles são armazenados em uma matriz serializada, preciso usar uma function diferente ou simplesmente configurá-lo de forma diferente?

update_post_meta($post_id, 'appliances', esc_attr(strip_tags($_POST['customMetaAppliances[]']))); 

Aqui está o código para exibir as checkboxs de seleção no frontend, o que está funcionando perfeitamente, é apenas que as opções verificadas não estão sendo salvas no database.

  $val){ if(is_array($allCheckbox) && in_array($val, $allCheckbox)){ $checked = 'checked = "checked"'; //$enable = ''; } else { $checked = ''; //$enable = 'disabled=""'; } ?> 
  • <input type="checkbox" name="customMetaAppliances[]" id="customMetaAppliances" value="" />
  • <?php $count++; if ($count == 3) { echo '
      '; $count = 0; } } ?>

    Ao visualizar a linha dentro do database, é o que está sendo passado, então a matriz de checkboxs de seleção está sendo ignorada?

    insira a descrição da imagem aqui

    ATUALIZAR:

    insira a descrição da imagem aqui

    Então, isso faz sentido, mas parece que a matriz de name = “customMetaAppliances []” não está sendo passada das checkboxs de seleção? O que é que vocês acham?

    Solutions Collecting From Web of "Frontend Form Checkbox Update ACF Field"

    Para ser compatível com a ACF, você deve primeiro descobrir como o ACF está salvando os valores das checkboxs de seleção no database. Como agora, isso é uma matriz serializada. Quando sabemos que devemos salvar nossas checkboxs de seleção frontend da mesma maneira. A boa notícia é que você pode passar apenas array para update_post_meta e o WordPress irá cuidar da serialização.

    O problema com seu código é que você provavelmente não está passando a matriz de valores de checkbox de seleção. Você deve investigar esta parte: esc_attr(strip_tags($_POST['customMetaAppliances[]'])) .

    Duas coisas que me incomodam aqui:

    • esc_attr funções esc_attr e strip_tags estão esperando uma string como argumento não uma matriz, eles podem retornar resultados inesperados
    • se você quiser obter uma variedade de checkboxs de seleção da solicitação de publicação, você deve usar o nome do campo sem colchetes customMetaAppliances

    Eu acho que você pode replace a parte de economia com o código:

     $customMetaAppliances = filter_input( INPUT_POST, 'customMetaAppliances', FILTER_SANITIZE_STRING, FILTER_REQUIRE_ARRAY ); update_field( 'customMetaAppliances', $customMetaAppliances, $post_id ); 

    Pessoalmente, quando eu instalei ACF, use update_field vez de update_post_meta .

    Eu criei a class inteiramente trabalhadora que exibirá o formulário no frontend após o conteúdo do post e salvará valores para postar campos ACF no envio.

     class WPSE_287946_Form { /** * Class constructor */ public function __construct() { $this->define_hooks(); } public function save_form() { if( isset( $_POST['save'] ) ) { // Submit button $post_id = filter_input( INPUT_POST, 'id', FILTER_SANITIZE_NUMBER_INT ); $name = filter_input( INPUT_POST, 'name', FILTER_SANITIZE_STRING ); $color = filter_input( INPUT_POST, 'color', FILTER_SANITIZE_STRING ); $accessories = filter_input( INPUT_POST, 'accessories', FILTER_SANITIZE_STRING, FILTER_REQUIRE_ARRAY ); update_field( 'name', $name, $post_id ); update_field( 'color', $color, $post_id ); update_field( 'accessories', $accessories, $post_id ); // Redirect user because POST request on single post page will trigger 404 page. wp_redirect( get_permalink( $post_id ) ); } } /** * Display form */ public function display_form( $content ) { $name = get_field( 'name' ); $color = get_field( 'color' ); $accessories = get_field( 'accessories' ); ob_start(); ?> 

    < ?php $this->display_text( 'name', 'Name', $name ); ?>

    < ?php $this->display_select( 'color', 'Color', $this->get_available_colors(), $color ); ?>

    < ?php $this->display_checkboxes( 'accessories', 'Accessories', $this->get_available_accessories(), $accessories ); ?>

    < ?php $output = ob_get_contents(); ob_end_clean(); return $content . $output; } /** * Display text field */ private function display_text( $name, $label, $value = '' ) { ?> < ?php } /** * Display select field */ private function display_select( $name, $label, $options, $value = '' ) { ?> < ?php } /** * Display options */ private function display_options( $options, $value ) { foreach( $options as $option_value => $option_label ): $selected = ( $option_value === $value ) ? ' selected' : ''; ?> < ?php endforeach; } /** * Display checkboxes field */ private function display_checkboxes( $name, $label, $options, $values = array() ) { $name .= '[]'; ?> < ?php foreach ( $options as $option_value => $option_label ): $this->display_checkbox( $name, $option_label, $option_value, $values ); endforeach; } /** * Display single checkbox field */ private function display_checkbox( $name, $label, $available_value, $values = array() ) { $checked = ( in_array($available_value, $values) ) ? ' checked' : ''; ?> < ?php } /** * Get available colors */ private function get_available_colors() { return array( 'red' => 'Red', 'blue' => 'Blue', 'green' => 'Green', ); } /** * Get available accessories */ private function get_available_accessories() { return array( 'case' => 'Case', 'tempered_glass' => 'Tempered glass', 'headphones' => 'Headphones', ); } /** * Define hooks related to plugin */ private function define_hooks() { /** * Add action to save form */ add_action( 'wp', array( $this, 'save_form' ) ); /** * Add filter to display form */ add_filter( 'the_content', array( $this, 'display_form' ) ); } } new WPSE_287946_Form();

    O nome da checkbox de seleção não deve ser name = “customMetaAppliances []”? Dessa forma, você obtém uma matriz deles em $ _POST. agora você está passando apenas o valor do último no formulário, se não for verificado, está vazio e não salvo.