Как установить минимальный размер изображения для загрузки?

17

Мне нужен способ запретить авторам загружать изображения ниже определенных размеров.

Скажем, я хочу разрешить загрузку изображений размером не менее 400 на 400 пикселей. Если размер изображения меньше, автор должен получить сообщение об ошибке, что изображение слишком маленькое.

Есть ли плагин или код, который может сделать это?

boruchsiper
источник

Ответы:

25

Добавьте этот код в файл functions.php вашей темы , и он ограничит минимальные размеры изображения

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

Затем просто измените числа минимальных размеров, которые вы хотите (в моем примере это 640 и 480)

Маор Баразаны
источник
Благодарность! Есть ли способ НЕ запускать эту функцию, если мы включаем миниатюру сообщения?
Артур Дос Сантос Диас
Это выполняется каждый раз, когда вы загружаете файл, на шаге это все еще просто файл, прежде чем вы классифицируете его или назначаете его в качестве эскиза. Вы можете добавить условие, основанное на имени файла, с выбранным вами префиксом / суффиксом и присвоить этому файлу имя, помеченное как пиктограмма, после чего не запускать функцию, если имя файла соответствует этому условию.
Маор Баразаны
Для ссылок в строке 14 необходимо заменить «width» на «height», но в остальном это было именно то, что мне нужно.
11

Я предпочитаю не переформатировать код коллеги.
Таким образом, это почти тот же ответ, что и у @ MaorBarazany, но с проверкой типа mime, изменением file['error']объявления и изменением пространства имен функции на этот wpse Question ID.

Кроме того, проверка происходит только для пользователей, которые не являются администраторами .

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

Результат крючка:

заблокированные загрузки изображений

brasofilo
источник
Люблю это, и это работает как шарм. Однако есть одна проблема: если я хочу применить этот фильтр только к определенным типам записей, пользователи по-прежнему могут выбрать изображение из библиотеки мультимедиа, которое было загружено в другой тип записей (без требований к размеру), которое не соответствует этим требованиям.
cfx
Есть ли способ применить это, только если мы загружаем избранные изображения?
Смерть