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

12

Je travaille sur un paramètre super strict pour ajouter des images aux champs personnalisés dans l'écran Post Edit. Mon scénario optimal serait d'ajouter un message d'erreur personnalisé lorsque l'utilisateur essaie de télécharger une image de la mauvaise taille 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édias ordinaire. Je connais également le wp_handle_upload_prefilter que j'utilise déjà pour valider les noms de fichiers et générer des messages d'erreur personnalisés en fonction des exigences génériques. Ce dont j'ai besoin maintenant, c'est d'un moyen d'utiliser des exigences personnalisées pour rejeter les téléchargements en fonction du champ vers lequel nous téléchargeons.

Je suis également au courant de la différenciation de l'image sélectionnée à partir des images publiées lors du téléchargement, mais je voulais une solution de pré-enregistrement.

Cela ressemblerait à quelque chose comme ceci:

entrez la description de l'image ici

Avez-vous des idées sur la façon d'informer wp_handle_upload_prefilter(ou un similaire) de quel domaine nous traitons?

Moralida
la source
Question interessante. Je pense que, d'une manière générale, passez une variable personnalisée via votre script modal de téléchargement de médias personnalisé que vous pouvez ensuite passer pour une différenciation supplémentaire en cours de route. C'est peut-être le seul moyen, même si je n'en suis pas sûr à 100%. Vous trouverez les informations dont vous avez besoin à ce sujet, si vous continuez et que vous les recherchez. Revenez ensuite et complétez votre question avec ces informations concrètes ou, si vous la résolvez vous-même, postez votre solution comme réponse. Bonne chance!
Nicolai
Si je dis personnalisé, je veux dire une utilisation personnalisée de WordPress Media Uploader, comme par exemple discuté ici .
Nicolai
Oui, j'ai déjà fait quelque chose comme ça, à l'époque du Flash Uploader. J'allais pour une voie plus propre cette fois, mais cela pourrait ne pas être possible. Va examiner cela, merci!
moralida
Je vous entends, mais je ne pense pas que ce soit une mauvaise façon de le faire. De plus, comme je l'ai dit, je ne vois pas / ne connais pas une autre façon de le faire, mais il pourrait y avoir quelqu'un avec plus de connaissances pour clarifier cela.
Nicolai
1
Allez-vous de l'avant avec ça? Sinon, mais vous avez du code sur lequel vous travaillez, postez-le. Je suis prêt à mettre en place une prime à la question s'il y a plus de fondement à cela.
Nicolai

Réponses:

4

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:

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

Notez que cela wp_handle_upload_prefilterarrive très tôt dans le processus de téléchargement, vous pouvez donc tester 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.

Réf: fonction wp_handle_upload()dans le fichier corewp-admin/includes/file.php

YaFred
la source
Oui, c'est ce que je fais déjà pour valider les noms de fichiers et les propriétés svg. Ce dont j'ai besoin maintenant, c'est d'un moyen de passer un autre paramètre à ce (ou un autre) filtre, indiquant quel champ est rempli par ce téléchargement afin que je puisse appliquer différentes restrictions pour différents champs. C'est actuellement en attente. Je mettrai à jour la question plus tard avec mes conclusions.
moralida