Jak wymagać minimalnego wymiaru obrazu do przesłania?

17

Potrzebuję sposobu, aby ograniczyć autorom przesyłanie zdjęć poniżej określonych wymiarów.

Powiedzmy, że chcę zezwolić tylko na przesyłanie zdjęć o wymiarach co najmniej 400 x 400 pikseli. Jeśli rozmiar obrazu jest mniejszy, autor powinien otrzymać komunikat o błędzie, że obraz jest zbyt mały.

Czy istnieje wtyczka lub kod, który może to zrobić?

boruchsiper
źródło

Odpowiedzi:

25

Dodaj ten kod do pliku functions.php motywu , aby ograniczyć minimalne wymiary obrazu

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

Następnie wystarczy zmienić liczby minimalnych wymiarów, które chcesz (w moim przykładzie to 640 i 480)

Maor Barazany
źródło
Dzięki! Czy jest jakiś sposób, aby NIE uruchamiać tej funkcji, jeśli dołączamy miniaturę posta?
Arthur Dos Santos Dias
Działa to za każdym razem, gdy przesyłasz plik, w tym etapie jest to tylko plik, zanim go skategoryzujesz lub przypiszesz jako miniaturę. Możesz dodać warunek na podstawie nazwy pliku z wybranym prefiksem / sufiksem i nazwać w ten sposób swoje miniatury jako pliki, niż nie uruchamiać funkcji, jeśli nazwa pliku spełnia ten warunek.
Maor Barazany
Odniesienia do wiersza 14 muszą zostać zastąpione wyrazem „szerokość” wyrazem „wysokość”, ale poza tym tego właśnie potrzebowałem.
11

Wolę nie formatować kodu kolegi.
Tak więc jest to prawie taka sama odpowiedź jak @ MaorBarazany, ale sprawdzanie typu mime, zmiana file['error']deklaracji i zmiana przestrzeni nazw funkcji na ten wpse ID pytania.

Sprawdzanie odbywa się również dla użytkowników niebędących administratorami .

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

Wynik haka:

zablokowane przesyłanie obrazu

brasofilo
źródło
Uwielbiam to i działa jak urok. Jest jednak jeden problem: jeśli chcę zastosować ten filtr tylko do niektórych typów postów, użytkownicy mogą nadal wybrać obraz z Biblioteki multimediów, który został przesłany w innym typie postu (bez wymagań dotyczących wielkości), który nie spełnia tych wymagań.
por
Czy można to zastosować tylko wtedy, gdy przesyłamy polecany obraz?
deathlock