Як вимагати мінімального розміру зображення для завантаження?


17

Мені потрібен спосіб обмежити авторів у завантаженні зображень нижче конкретних розмірів.

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

Чи є плагін або код, який може це досягти?

Відповіді:


25

Додайте цей код у файл function.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 повинні мати "ширину" замінено на "висоту", але в іншому випадку це саме те, що мені потрібно.

11

Я вважаю за краще не переформатувати код колеги.
Отже, це майже та сама відповідь, що і @ MaorBarazany, але перевірка типу mime, зміна file['error']декларації та зміна простору імен функцій на цей wpse ідентифікатор питання.

Також перевірка відбувається лише для користувачів, які не є адміністраторами .

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

Результат гака:

заблоковані завантаження зображень


Любіть це, і це працює як шарм. Однак є одне питання: якщо я хочу застосувати цей фільтр лише для певних типів публікацій, користувачі все ще можуть обрати зображення з медіатеки, яке було завантажено іншим типом публікації (без вимог щодо розміру), яке не відповідає цим вимогам.
cfx

Чи є спосіб застосувати це, лише якщо ми завантажуємо зображення?
смертельна дім
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.