Rejeitar o upload de imagens de tamanho errado usando o Media Uploader

12

Estou trabalhando em uma configuração super rigorosa para adicionar imagens aos campos personalizados na tela Pós-edição. Meu cenário ideal seria adicionar uma mensagem de erro personalizado quando o usuário tentar carregar uma imagem do tamanho errado para esse valor personalizado específico.

Estou ciente de que posso fazer isso com qualquer uploader personalizado, mas eu realmente prefiro fazê-lo com o Media Uploader comum. Também estou ciente do wp_handle_upload_prefilter que eu já uso para validar nomes de arquivos e gerar mensagens de erro personalizadas com base em requisitos genéricos. No momento, preciso de uma maneira de usar requisitos personalizados para rejeitar envios com base no campo para o qual estamos enviando.

Também estou ciente de Diferenciar imagem em destaque de Postar imagens no upload, mas queria uma solução de pré-salvamento.

Isso seria algo como isto:

insira a descrição da imagem aqui

Alguma idéia de como informar wp_handle_upload_prefilter(ou algo semelhante) sobre qual campo estamos lidando?

moraleida
fonte
Pergunta interessante. Penso que, de um modo geral, passe uma variável personalizada por meio do script modal do carregador de mídia personalizado, que você poderá passar por uma diferenciação adicional ao longo do caminho. Essa pode ser a única maneira, embora eu não tenha 100% de certeza sobre isso. Você encontrará as informações necessárias sobre isso, se continuar e procurá-las. Depois, volte e complete sua pergunta com essas informações concretas ou, se você mesmo as resolver, poste sua solução como resposta. Boa sorte!
Nicolai
Se eu disser personalizado, quero dizer o uso personalizado do WordPress Media Uploader, como por exemplo discutido aqui .
Nicolai
Sim, eu fiz algo assim antes, nos dias do Flash Uploader. Eu estava indo para uma maneira mais limpa desta vez, mas apenas pode não ser possível. Vai olhar para isso, obrigado!
Moraleida
Eu ouvi você, mas na verdade não acho que seja uma maneira tão ruim de fazê-lo. Além disso, como eu disse, simplesmente não vejo / sei outra maneira de fazer isso, mas pode haver alguém com mais conhecimento para esclarecer isso.
Nicolai
1
Você está progredindo nisso? Caso contrário, mas você tem algum código no qual está trabalhando, poste-o. Estou disposto a configurar uma recompensa para a pergunta, se houver mais fundamento.
Nicolai

Respostas:

4

No seu manipulador, se você definir 'erro', a mensagem de erro será exibida e cancelará o upload

add_filter( 'wp_handle_upload_prefilter', 'custom_upload_filter' );

function custom_upload_filter( $file ) {
    $image_info   = getimagesize( $file['tmp_name'] );
    $image_width  = $image_info[0];
    $image_height = $image_info[1];

    if ( $image_with !== 800 || $image_height !== 600 ) {
        $file['error'] = __( 'Images must be sized exactly 800 * 600', 'your_textdomain' );
    }
    return $file;
}

Se o usuário tentar fazer upload de um tamanho diferente, a mensagem será:

thefile.png has failed to upload due to an error  
Size must be exactly 800 * 600

Observe que isso wp_handle_upload_prefilterocorre muito cedo no processamento de upload; portanto, você pode testar se o arquivo foi carregado corretamente (do ponto de vista HTTP) e é uma imagem antes de testar o tamanho.

Ref: funtion wp_handle_upload()no arquivo principalwp-admin/includes/file.php

YaFred
fonte
Sim, é isso que já estou fazendo para validar nomes de arquivos e propriedades svg. O que eu preciso agora é uma maneira de passar outro parâmetro para esse filtro (ou outro), indicando qual campo está sendo preenchido por esse upload para que eu possa aplicar restrições diferentes para campos diferentes. Isso está realmente em espera no momento. Atualizarei a pergunta mais tarde com minhas descobertas.
moraleida