web-dev-qa-db-fra.com

Refuser le téléchargement d'images de taille incorrecte à l'aide de Media Uploader

Je travaille sur un paramètre extrêmement strict pour l'ajout d'images à des champs personnalisés dans l'écran d'édition. Mon scénario optimal consisterait à ajouter un message d'erreur personnalisé lorsque l'utilisateur essaiera de télécharger une image de taille incorrecte pour cette valeur personnalisée spécifique.

Je suis conscient que je peux le faire avec n'importe quel téléchargeur personnalisé, mais je préférerais vraiment le faire avec le téléchargeur de média standard. Je suis également conscient du wp_handle_upload_prefilter que je utilise déjà pour valider les noms de fichiers et générer des messages d'erreur personnalisés en fonction d'exigences génériques. Ce dont j'ai besoin maintenant, c'est d'un moyen d'utiliser les exigences personnalisées pour refuser les téléchargements en fonction du champ sur lequel nous téléchargeons.

Je suis également conscient de Différencier l’image sélectionnée de la publication d’images au moment du téléchargement mais je voulais une solution de sauvegarde avant enregistrement.

Cela ressemblerait à quelque chose comme ça:

enter image description here

Avez-vous des idées sur la façon d’informer wp_handle_upload_prefilter (ou un nom similaire) du champ avec lequel nous traitons?

12
moraleida

Dans votre gestionnaire, si vous définissez 'erreur', le message d'erreur sera affiché et annulera le téléchargement.

add_filter( 'wp_handle_upload_prefilter', 'custom_upload_filter' );

function custom_upload_filter( $file ) {
    $image_info   = getimagesize( $file['tmp_name'] );
    $image_width  = $image_info[0];
    $image_height = $image_info[1];

    if ( $image_with !== 800 || $image_height !== 600 ) {
        $file['error'] = __( 'Images must be sized exactly 800 * 600', 'your_textdomain' );
    }
    return $file;
}

Si votre utilisateur tente de télécharger une taille différente, le message sera le suivant:

“thefile.png” has failed to upload due to an error  
Size must be exactly 800 * 600

Notez que wp_handle_upload_prefilter intervient très tôt dans le traitement du téléchargement. Vous pouvez donc vérifier si le fichier a été correctement téléchargé (du point de vue HTTP) et s'il s'agit d'une image avant de tester la taille.

Ref: funtion wp_handle_upload() dans le fichier de base wp-admin/includes/file.php

3
YaFred