Rechazar la carga de imágenes de tamaño incorrecto con el Cargador de medios

12

Estoy trabajando en una configuración súper estricta para agregar imágenes a los campos personalizados en la pantalla Publicar edición. Mi escenario óptimo sería agregar un mensaje de error personalizado cuando el usuario intenta cargar una imagen del tamaño incorrecto para ese valor personalizado específico.

Soy consciente de que puedo hacer esto con cualquier cargador personalizado, pero realmente preferiría hacerlo con el cargador habitual de medios. También conozco el wp_handle_upload_prefilter que ya uso para validar nombres de archivos y generar mensajes de error personalizados basados ​​en requisitos genéricos. Lo que necesito en este momento es una forma de usar requisitos personalizados para rechazar cargas basadas en el campo al que estamos cargando.

También soy consciente de diferenciar la imagen destacada de las imágenes de publicación al subir, pero quería una solución previa al guardado.

Esto se vería así:

ingrese la descripción de la imagen aquí

¿Alguna idea sobre cómo hacer para informar wp_handle_upload_prefilter(o similar) de qué campo estamos tratando?

moraleida
fuente
Interesante pregunta. En general, estoy pensando en pasar una variable personalizada a través de su script modal de cargador de medios personalizado que luego puede pasar para una mayor diferenciación en el camino. Esta podría ser la única forma, aunque no estoy 100% seguro de eso. Encontrará la información que necesita sobre eso, si continúa y la busca. Luego regrese y complete su pregunta con esa información concreta o, si la resuelve usted mismo, publique su solución como respuesta. ¡Buena suerte!
Nicolai
Si digo personalizado, me refiero al uso personalizado de WordPress Media Uploader, como por ejemplo, discutido aquí .
Nicolai
Sí, he hecho algo así antes, en los días de Flash Uploader. Esta vez estaba buscando una forma más limpia, pero podría no ser posible. Lo investigaremos, gracias!
moraleida
Te escucho, pero en realidad no creo que sea una mala manera de hacerlo. Además, como dije, simplemente no veo / conozco otra forma de hacerlo, pero podría venir alguien con más conocimiento para aclarar eso.
Nicolai
1
¿Estás avanzando con esto? Si no, pero tiene un código en el que está trabajando, publíquelo. Estoy dispuesto a configurar una recompensa por la pregunta si hay más bases para ello.
Nicolai

Respuestas:

4

En su controlador, si configura 'error', se mostrará el mensaje de error y cancelará la carga

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 su usuario intenta cargar un tamaño diferente, el mensaje será:

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

Tenga en cuenta que wp_handle_upload_prefilterviene muy temprano en el proceso de carga, por lo que es posible que desee probar si el archivo se ha cargado correctamente (desde el punto de vista HTTP) y es una imagen antes de probar el tamaño.

Ref: función wp_handle_upload()en el archivo centralwp-admin/includes/file.php

YaFred
fuente
Sí, esto es lo que ya estoy haciendo para validar nombres de archivo y propiedades de svg. Lo que necesito en este momento es una manera de pasar otro parámetro a ese (u otro) filtro, que indique qué campo está siendo llenado por esa carga para que pueda aplicar diferentes restricciones para diferentes campos. Esto está en espera ahora mismo. Actualizaré la pregunta más adelante con mis hallazgos.
moraleida