Можно ли определить, когда пользователь находится в "Медиафайлы > Добавить новое" vs "Запись > Добавить изображение"

25 янв. 2011 г., 22:01:19
Просмотры: 265
Голосов: 0

Я хочу обернуть приведенный ниже фильтр в условие, которое проверяет, загружает ли пользователь изображение через Медиабиблиотеку (Админка > Медиафайлы > Добавить новое), а не через загрузку изображения в редакторе записи.

Возможно ли это определить? Переменная $pagenow в обоих случаях кажется одинаковой...

//без дополнительных миниатюр
global $pagenow;
if($pagenow=="media-new.php"){
add_filter('intermediate_image_sizes_advanced','ce4_no_thumbs');
}
function ce4_no_thumbs($sizes){return array();}

Обновление: Похоже, что post_id присутствует в строке запроса при загрузке из записи и отсутствует при загрузке через "медиабиблиотеку > добавить новое", однако следующий тест проходит в обоих случаях...

if ( is_admin() && !isset($_GET['post_id']) ) {
    /*Это не должно срабатывать, если пользователь загружает изображение в запись,
      так как post_id есть в строке запроса. Однако в моем тесте
      проверка все равно проходит.*/

add_filter('intermediate_image_sizes_advanced','ce4_no_thumbs');
}
0
Все ответы на вопрос 2
5

Я ответил на этот вопрос в комментариях к вашему предыдущему вопросу.

...вы можете использовать фильтр, который предложил @Backie выше (intermediate_image_sizes_advanced), и в функции-обработчике проверить поле в коллекции поста с именем _wp_http_referer. Оно указывает, откуда пришел запрос на загрузку.

Если _wp_http_referer содержит "media-new.php", вы можете вернуть пустой массив (это временно остановит генерацию миниатюр, но не изменит никаких настроек миниатюр). В противном случае верните массив $sizes без изменений.

Попробуйте:

function wpsx_7756_no_thumbnails($arr_sizes){

    if(stristr($_POST['_wp_http_referer'], 'media-new.php')) {
        return array();
    }

    return $arr_sizes;

}

add_filter('intermediate_image_sizes_advanced','wpsx_7756_no_thumbnails');

Дайте мне знать, если это сработает.

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

26 янв. 2011 г. 02:10:09
Комментарии

@MathSmath: Я добавил это в functions.php и протестировал. К сожалению, все миниатюры всё равно создаются при использовании "Медиафайлы > Добавить новый". Есть идеи по трассировке? echo "the post referrer: ".$_POST['_wp_http_referer']; (возвращает целое число, увеличивающееся на +1 при каждой загрузке)

Scott B Scott B
26 янв. 2011 г. 02:25:10

Возможно, другим вариантом будет проверка на iframe? Похоже, он есть в загрузчике через запись, но, видимо, отсутствует в загрузчике через менеджер медиафайлов > добавить новый.

Scott B Scott B
26 янв. 2011 г. 02:33:16

@Scott B Чёрт! Я был уверен, что это сработает :) Не уверен насчёт iframe. Для трассировки попробуйте добавить wp_die(json_encode($_POST)) в начало вашей функции "no thumbnails". Это выведет содержимое массива POST на момент выполнения фильтра. Вполне возможно, что к моменту, когда WordPress доходит до создания миниатюр, исходный массив POST уже выходит из области видимости? В любом случае, вы можете увидеть что-то в доступном массиве POST, что можно использовать для идентификации реферера.

MathSmath MathSmath
26 янв. 2011 г. 03:07:35

@MAthSmath: Понял! if(!stristr($_POST['type'], 'image')) {return array();}return $arr_sizes;}

Scott B Scott B
26 янв. 2011 г. 04:46:37

@ScottB ОТЛИЧНО! Рад, что у тебя заработало.

MathSmath MathSmath
26 янв. 2011 г. 05:35:31
0

Попробуйте использовать $_GET['post'] вместо $_GET['post_id']?

Это параметр запроса, который я вижу.

26 янв. 2011 г. 01:58:06