Как проверить, загружает ли пользователь / устанавливает изображение в качестве избранного изображения?

Я делаю ограничение на загрузку изображений на основании @brasofilo Отличный фрагмент . Короче говоря, это ограничивает пользователя только загрузкой изображения с минимальным размером.

Однако я хочу применять это только тогда, когда пользователь загружает показанное изображение. Я пытался использовать $ pagenow в качестве условного,

global $pagenow;if ($pagenow == 'media-upload.php')    add_filter( 'wp_handle_upload_prefilter', 'wpse_28359_block_small_images_upload' ); 

Но это не работает. Есть идеи?

Ответы и комментарии:

Как это ограничивает ограничение только избранными изображениями?
Создан 14-10-2016 11:31 Andy Macaulay-Brook

Да, это не ограничивает только показанные изображения. У меня запущен скрипт измерения изображения. То, что мне нужно, это ограничить его, только когда вы настраиваете рекомендуемое изображение. Поэтому добавление изображения в пост не должно быть ограничено.
Создан 15-10-2016 04:01 deathlock

Определить, является ли вложение на самом деле избранным изображением, легко:
get_post_thumbnail_id (get_post ());

которая является удобной функцией вокруг
get_post_meta (get_post () -> ID, '_thumbnail_id', true);

Это немного сложнее, если вы ничего не знаете, кроме имени файла или URL.
add_filter ('wp_handle_upload_prefilter', функция ($ file) {

    $ url = wp_get_attachment_image_src (
        get_post_thumbnail_id (get_post ()),
        «Пост-миниатюр»
    );

    // Вывод возможных ошибок
    if (false! == strpos ($ url, $ file)) {
        $ file ['error'] = 'Извините, но мы разрешаем только избранные изображения';
    }

    вернуть $ file;
});

Как вы можете видеть, я сравниваю только текущую строку файла с сообщениями избранных изображений URl. Обратите внимание, что я не знаю, будет ли это работать, это не проверено, и wp_handle_upload_prefilter может быть слишком рано.
Другим вариантом может быть использование последнего фильтра внутри _wp_handle_upload ():
apply_filters ('wp_handle_upload', массив (
    'file' => $ new_file,
    'url' => $ url,
    'type' => $ type
), 'wp_handle_sideload' === $ action? 'sideload': 'upload');

который обрабатывает боковую нагрузку, а также.
Теоретически я предполагаю, что еще слишком рано проверять, является ли изображенное изображение фактически изображенным изображением, прежде чем оно будет установлено. Возможно, вы сможете отменить загрузку после ее завершения (удалить файл, сбросить метаданные записи), но это далеко не так элегантно.
Сам мета-блок зарегистрирован с помощью add_meta_box (), а обратный вызов этого поля - post_thumbnail_meta_box, который вызывает _wp_post_thumbnail_html () для визуализации содержимого. Когда вы посмотрите туда, вы увидите, что на самом деле скрытое поле:
$ content. = '';

Теперь имя _thumbnail_id, которое вы можете выбрать с помощью filter_input () (хорошо) или с $ _POST ['_ thumbnail_id'] (плохо) внутри обратного вызова, такого как wp_handle_upload_prefilter, чтобы определить, действительно ли это было рекомендуемое изображение:
$ featID = filter_input (INPUT_POST, '_thumbnail_id',… filters…);
Создан 18-10-2016 07:49

Добавьте приведенный ниже код в файл functions.php вашей текущей темы, и он ограничит минимальные размеры изображения:
add_filter ( 'wp_handle_upload_prefilter', 'tc_handle_upload_prefilter');
функция tc_handle_upload_prefilter ($ file)
{

    $ IMG = getimagesize ($ файла [ ​​'tmp_name']);
    $imum = array ('width' => '250', 'height' => '200');
    $ width = $ img [0];
    $ height = $ img [1];

    если ($ ширина <$ минимум ['ширина'])
        return array ("error" => "Размеры изображения слишком малы. Минимальная ширина: {$ минимум ['ширина']} px. Ширина загружаемого изображения: $ width px");

    elseif ($ высота <$ минимум ['высота'])
        return array ("error" => "Размеры изображения слишком малы. Минимальная высота - {$ минимум ['высота']} px. Высота загружаемого изображения - $ height px");
    еще
        вернуть $ file;
}

Затем просто измените числа минимальных размеров, которые вы хотите (в моем примере это 250 и 200)
Создан 14-10-2016 11:45 AddWeb Solution Pvt Ltd1,8101415