Como exigir uma dimensão mínima de imagem para upload?


17

Preciso de uma maneira de impedir que os autores enviem imagens abaixo das dimensões específicas.

Digamos que só queira permitir o upload de imagens com pelo menos 400 px x 400 px. Se o tamanho da imagem for menor, o autor receberá um aviso de erro de que a imagem é muito pequena.

Existe um plug-in ou código que possa fazer isso?

Respostas:


25

Adicione este código ao arquivo functions.php do seu tema e limitará as dimensões mínimas da imagem

add_filter('wp_handle_upload_prefilter','tc_handle_upload_prefilter');
function tc_handle_upload_prefilter($file)
{

    $img=getimagesize($file['tmp_name']);
    $minimum = array('width' => '640', 'height' => '480');
    $width= $img[0];
    $height =$img[1];

    if ($width < $minimum['width'] )
        return array("error"=>"Image dimensions are too small. Minimum width is {$minimum['width']}px. Uploaded image width is $width px");

    elseif ($height <  $minimum['height'])
        return array("error"=>"Image dimensions are too small. Minimum height is {$minimum['height']}px. Uploaded image height is $height px");
    else
        return $file; 
}

Em seguida, basta alterar os números das dimensões mínimas desejadas (no meu exemplo são 640 e 480)


Obrigado! Existe alguma maneira de NÃO executar esta função se estiver incluindo uma miniatura de postagem?
Arthur Dos Santos Dias

Isso é executado sempre que você faz o upload de um arquivo, na etapa ainda é apenas um arquivo, antes de categorizá-lo ou atribuí-lo como miniatura. Você pode adicionar uma condição com base no nome do arquivo com um prefixo / sufixo de sua escolha e nomear sua miniatura como arquivos por isso, para não executar a função se o nome do arquivo atender a essa condição.
Maor Barazany

As referências da linha 14 precisam ter "width" substituído por "height", mas, caso contrário, era exatamente isso que eu precisava.

11

Prefiro não reformatar o código de um colega.
Portanto, essa é quase a mesma resposta que a de @ MaorBarazany, mas verificando o tipo mime, alterando a file['error']declaração e alterando o espaço de nomes da função para esse wpse Question ID.

Além disso, a verificação ocorre apenas para usuários que não são administradores .

add_action( 'admin_init', 'wpse_28359_block_authors_from_uploading_small_images' );

function wpse_28359_block_authors_from_uploading_small_images()
{
    if( !current_user_can( 'administrator') )
        add_filter( 'wp_handle_upload_prefilter', 'wpse_28359_block_small_images_upload' ); 
}

function wpse_28359_block_small_images_upload( $file )
{
    // Mime type with dimensions, check to exit earlier
    $mimes = array( 'image/jpeg', 'image/png', 'image/gif' );

    if( !in_array( $file['type'], $mimes ) )
        return $file;

    $img = getimagesize( $file['tmp_name'] );
    $minimum = array( 'width' => 640, 'height' => 480 );

    if ( $img[0] < $minimum['width'] )
        $file['error'] = 
            'Image too small. Minimum width is ' 
            . $minimum['width'] 
            . 'px. Uploaded image width is ' 
            . $img[0] . 'px';

    elseif ( $img[1] < $minimum['height'] )
        $file['error'] = 
            'Image too small. Minimum height is ' 
            . $minimum['height'] 
            . 'px. Uploaded image height is ' 
            . $img[1] . 'px';

    return $file;
}

Resultado do gancho:

uploads de imagens bloqueados


Amo isso e funciona como um encanto. No entanto, há um problema: se eu quiser aplicar esse filtro apenas em certos tipos de postagem, os usuários ainda poderão escolher uma imagem da Biblioteca de Mídia que foi carregada em outro tipo de postagem (sem os requisitos de tamanho) que não atenda a esses requisitos.
cfx 16/05

Existe uma maneira de aplicar isso apenas se estivermos carregando imagem em destaque?
Deathlock
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.