¿Cómo exigir una dimensión mínima de imagen para cargar?


17

Necesito una forma de restringir que los autores carguen imágenes debajo de dimensiones específicas.

Digamos que solo quiero permitir la carga de imágenes que tengan al menos 400 px x 400 px. Si el tamaño de la imagen es más pequeño, el autor debe recibir un aviso de error de que la imagen es demasiado pequeña.

¿Hay algún complemento o código que pueda lograr esto?

Respuestas:


25

Agregue este código al archivo functions.php de su tema , y limitará las dimensiones mínimas de la imagen.

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

Luego, simplemente cambie los números de las dimensiones mínimas que desee (en mi ejemplo, 640 y 480)


¡Gracias! ¿Hay alguna forma de NO ejecutar esta función si estamos incluyendo una miniatura de publicación?
Arthur Dos Santos Dias

Esto se ejecuta cada vez que carga un archivo, en el paso sigue siendo solo un archivo, antes de clasificarlo o asignarlo como una miniatura. Puede agregar una condición basada en el nombre del archivo con un prefijo / sufijo de su elección, y nombrar sus miniaturas para que sean archivos de esta manera, que no ejecute la función si el nombre del archivo cumple esa condición.
Maor Barazany

Las referencias de la línea 14 deben tener "ancho" reemplazado por "altura" pero, de lo contrario, esto era exactamente lo que necesitaba.

11

Prefiero no formatear el código de un colega.
Entonces, esta es casi la misma respuesta que @ MaorBarazany, pero verificando el tipo mime, cambiando la file['error']declaración y cambiando el espacio de nombres de la función a esta ID de pregunta wpse.

Además, la verificación solo se produce para usuarios que no son 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 del gancho:

carga de imágenes bloqueadas


Me encanta esto y funciona como un encanto. Sin embargo, hay un problema: si quiero aplicar este filtro solo en ciertos tipos de publicaciones, los usuarios aún pueden elegir una imagen de la Biblioteca de medios que se cargó en otro tipo de publicación (sin los requisitos de tamaño) que no cumple con estos requisitos.
cfx

¿Hay alguna manera de aplicar esto solo si estamos cargando una imagen destacada?
deathlock
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.