Comment exiger une dimension d'image minimale pour le téléchargement?

17

J'ai besoin d'un moyen pour empêcher les auteurs de télécharger des images sous des dimensions spécifiques.

Supposons que je souhaite uniquement autoriser le téléchargement d'images d'au moins 400 px x 400 px. Si la taille de l'image est plus petite, l'auteur devrait recevoir un message d'erreur indiquant que l'image est trop petite.

Existe-t-il un plugin ou un code qui peut accomplir cela?

boruchsiper
la source

Réponses:

25

Ajoutez ce code au fichier functions.php de votre thème et cela limitera les dimensions minimales de l'image

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

Ensuite, changez simplement les numéros des dimensions minimales que vous souhaitez (dans mon exemple, 640 et 480)

Maor Barazany
la source
Merci! Existe-t-il un moyen de NE PAS exécuter cette fonction si nous incluons une vignette de publication?
Arthur Dos Santos Dias
Cela s'exécute à chaque fois que vous téléchargez un fichier, à l'étape il ne s'agit que d'un fichier, avant de le classer ou de l'assigner comme miniature. Vous pouvez ajouter une condition basée sur le nom du fichier avec un préfixe / suffixe de votre choix, et nommer vos miniatures pour être des fichiers par cela, puis ne pas exécuter la fonction si le nom de fichier remplit cette condition.
Maor Barazany
Les références de la ligne 14 doivent avoir "largeur" ​​remplacée par "hauteur" mais sinon c'était exactement ce dont j'avais besoin.
11

Je préfère ne pas reformater le code d'un collègue.
Donc, c'est presque la même réponse que celle de @ MaorBarazany, mais en vérifiant le type mime, en changeant la file['error']déclaration et en changeant l'espace de noms de fonction en cet ID de question wpse.

En outre, la vérification se produit uniquement pour les utilisateurs qui ne sont pas administrateurs .

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

Résultat du crochet:

téléchargements d'images bloqués

brasofilo
la source
J'adore cela et cela fonctionne comme un charme. Cependant, il y a un problème: si je veux appliquer ce filtre uniquement sur certains types de publication, les utilisateurs peuvent toujours choisir une image de la bibliothèque multimédia qui a été téléchargée dans un autre type de publication (sans les exigences de taille) qui ne répond pas à ces exigences.
cfx
Existe-t-il un moyen d'appliquer cela uniquement si nous téléchargeons l'image sélectionnée?
Deathlock