Отклонить загрузку изображений неправильного размера с помощью Media Uploader

12

Я работаю над очень строгой настройкой для добавления изображений в пользовательские поля на экране редактирования поста. Мой оптимальный сценарий - добавить пользовательское сообщение об ошибке, когда пользователь пытается загрузить изображение неправильного размера для этого конкретного пользовательского значения.

Я знаю, что могу сделать это с любым пользовательским загрузчиком, но я действительно предпочел бы сделать это с обычным загрузчиком медиа. Мне также известно о wp_handle_upload_prefilter, который я уже использую для проверки имен файлов и создания пользовательских сообщений об ошибках на основе общих требований. Сейчас мне нужен способ использовать пользовательские требования для отклонения загрузок на основе того, в какое поле мы загружаем.

Я также знаю о дифференцированном изображении от пост-изображений при загрузке, но я хотел предварительно сохранить решение.

Это будет выглядеть примерно так:

введите описание изображения здесь

Любые идеи о том, как идти об информировании wp_handle_upload_prefilter(или аналогичной), в какой области мы имеем дело?

moraleida
источник
Интересный вопрос. Я думаю, вообще говоря, передать пользовательскую переменную через ваш модальный скрипт загрузки мультимедиа, который вы затем можете пропустить для дальнейшей дифференциации. Это может быть единственный способ, хотя я не уверен на 100% в этом. Вы найдете необходимую информацию об этом, если вы продолжите искать ее. Затем вернитесь и дополните свой вопрос этой конкретной информацией или, если вы решите ее самостоятельно, опубликуйте свое решение как ответ. Удачи!
Николай
Если я говорю « пользовательский», я имею в виду пользовательское использование WordPress Media Uploader, как, например, обсуждалось здесь .
Николай
Да, я делал что-то подобное раньше, во времена Flash Uploader. В этот раз я шел более чистым путем, но это просто невозможно. Посмотрим на это, спасибо!
Моралейда
Я слышу вас, но на самом деле я не думаю, что это плохой способ сделать это. Кроме того, как я уже сказал, я просто не вижу / не знаю другого способа сделать это, но может прийти кто-то с большим количеством знаний, чтобы прояснить это.
Николай
1
Вы продвигаетесь с этим? Если нет, но у вас есть код, над которым вы работаете, опубликуйте его. Я готов назначить награду за вопрос, есть ли для этого основания.
Николай

Ответы:

4

В вашем обработчике, если вы установите «ошибка», сообщение об ошибке будет отображаться и отменит загрузку

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

Если ваш пользователь попытается загрузить другой размер, сообщение будет:

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

Обратите внимание, что это wp_handle_upload_prefilterпроисходит очень рано в процессе загрузки, поэтому вы можете проверить, правильно ли загружен файл (с точки зрения HTTP) и является ли оно изображением, прежде чем проверять размер.

Ссылка: функция wp_handle_upload()в основном файлеwp-admin/includes/file.php

YaFred
источник
Да, это то, что я уже делаю, чтобы проверить имена файлов и свойства SVG. Сейчас мне нужен способ передать другой параметр в этот (или другой) фильтр, указывающий, какое поле заполняется этой загрузкой, чтобы я мог применять различные ограничения для разных полей. Это на самом деле приостановлено прямо сейчас. Я уточню вопрос позже с моими выводами.
Моралейда