Suporte » Desenvolvendo com WordPress » media_handle_upload em formulario de contato com campos mistos

  • Resolvido Adson Cicilioti

    (@adson-cicilioti)


    Colaboro com o desenvolvimento do tema Odin Framework, que possui várias classes que alavancam o lançamento de um site do zero.
    Entre eles, temos o abstract-front-end-form.php (link para a função em questão), que prepara campos de formulário para o front-end, e o class-contact-form.php para criar um formulário de contato simples e eficaz.

    Meus colegas adotaram a função media_handle_upload para os campos do tipo file. O problema é que por padrão ele é obrigatório e gostaríamos de ter ele presente no form porem opcional. Mas ao submeter o form com o campo ‘file’ vazio ele retorna o erro ‘No file was uploaded.’ que é uma validação nativa da função media_handle_upload que não deixa submeter o campo file vazio.

    Uma forma que encontrei de saltar essa validação foi condicionando pela string do erro.

    
    if ( is_wp_error( $attachment_id ) && $attachment_id->get_error_message() !== 'No file was uploaded.' ) ) {
        $error = apply_filters( 'odin_front_end_form_upload_error_' . $this->id, sprintf( '%s %s.', '<strong>' . $this->get_field_label( $id ) . '</strong>', $attachment_id->get_error_message() ) );
        $this->set_errors( $error );
    } else {
       ...
    }
    

    Assim ele me deixa submeter o formulário com o campo file vazio (opcional).

    Nós podemos muito bem seguir com essa solução, mas nos parece um pouco obscuro, uma vez que numa atualização do WP core essas strings de erros de upload possam ser modificadas.

    Se alguém souber de alguma outra forma que não precise usar um plugin ou recursos, serei gratos por seus pensamentos.

    • Este tópico foi modificado 3 anos, 5 meses atrás por Adson Cicilioti.
    • Este tópico foi modificado 3 anos, 5 meses atrás por Adson Cicilioti. Motivo: Idioma pt BR
Visualizando 1 resposta (de um total de 1)
  • Consegui checando o tamanho do arquivo com $_FILES[$id]['size'] > 0. Assim a validação WP_error vai rodar apenas se haver um arquivo com peso em bytes.

    • Esta resposta foi modificada 3 anos, 5 meses atrás por Adson Cicilioti. Razão: SOLUÇÃO
Visualizando 1 resposta (de um total de 1)
  • O tópico ‘media_handle_upload em formulario de contato com campos mistos’ está fechado para novas respostas.