Wie erfordere ich eine minimale Bildgröße für das Hochladen?

17

Ich brauche eine Möglichkeit, Autoren daran zu hindern, Bilder in bestimmten Dimensionen hochzuladen.

Angenommen, ich möchte nur das Hochladen von Bildern zulassen, die mindestens 400 x 400 Pixel groß sind. Wenn das Bild kleiner ist, sollte der Autor eine Fehlermeldung erhalten, dass das Bild zu klein ist.

Gibt es ein Plugin oder einen Code, mit dem dies erreicht werden kann?

boruchsiper
quelle

Antworten:

25

Fügen Sie diesen Code zur Datei functions.php Ihres Themas hinzu , um die minimalen Bildabmessungen zu begrenzen

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

Ändern Sie dann einfach die Anzahl der gewünschten Mindestabmessungen (in meinem Beispiel 640 und 480).

Maor Barazany
quelle
Vielen Dank! Gibt es eine Möglichkeit, diese Funktion NICHT auszuführen, wenn wir ein Post-Thumbnail einbinden?
Arthur Dos Santos Dias
Dies wird jedes Mal ausgeführt, wenn Sie eine Datei hochladen. In diesem Schritt handelt es sich lediglich um eine Datei, bevor Sie sie kategorisieren oder als Miniaturbild zuweisen. Sie können eine Bedingung hinzufügen, die auf dem Dateinamen mit einem Präfix / Suffix Ihrer Wahl basiert, und Ihr Miniaturbild so benennen, dass es Dateien sind. Führen Sie dann die Funktion nicht aus, wenn der Dateiname diese Bedingung erfüllt.
Maor Barazany
Zeile 14 Referenzen müssen "Breite" durch "Höhe" ersetzt haben, aber ansonsten war dies genau das, was ich brauchte.
11

Ich ziehe es vor, den Code eines Kollegen nicht neu zu formatieren.
Das ist also fast die gleiche Antwort wie bei @ MaorBarazany, aber Überprüfung des MIME-Typs, Änderung der file['error']Deklaration und Änderung des Funktionsnamensraums in diese wpse-Frage-ID.

Die Überprüfung wird auch nur für Benutzer durchgeführt, die keine Administratoren sind .

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

Ergebnis des Hakens:

Blockierte Bild-Uploads

Brasofilo
quelle
Liebe dies und es funktioniert wie ein Zauber. Es gibt jedoch ein Problem: Wenn ich diesen Filter nur auf bestimmte Beitragstypen anwenden möchte, können Benutzer dennoch ein Bild aus der Medienbibliothek auswählen, das in einem anderen Beitragstyp hochgeladen wurde (ohne die Größenanforderungen), der diese Anforderungen nicht erfüllt.
Vgl.
Gibt es eine Möglichkeit, dies nur anzuwenden, wenn wir ein ausgewähltes Bild hochladen?
Deathlock