Произвольный размер миниаютры для типа записи в WordPress

В WordPress есть возможность добавлять произвольные размеры миниатюр (add_image_size). Благодаря этому, мы можем существенно уменьшить вес страниц, ведь, к примеру, в архиве записей будет отображена не полная картинка, а уменьшенная/обрезанная ее копия. Но у этой функции есть один недостаток. Добавляя новые размеры (по умолчанию в WordPress заданы три размера: thumbnail, medium, full) WordPress генерирует копии загруженной картинки с заданными размерами.

В большинстве случаев, если вы использует систему в качестве блога и единственными зарегистрированными типами записей (post type) у вас являются: post и page - проблем вы не заметите. Но если, к примеру вы шагнете дальше и решите добавить, скажем, слайдер в виде отдельного типа записи, создадите размер картинок для слайдера, то проблема отобразится достаточно быстро. Ведь заданный размер миниатюр для слайдера будет распространятся и для страниц и для записей в рубриках.. Это приводит к тому, что вскоре выделенного места под хранение файлов на хостинге попросту не хватает, при этом занято оно копиями картинок с размерами, которые не используются...

В итоге, было найдено следующее решение:
add_filter( 'intermediate_image_sizes', function($sizes){
    $type = get_post_type($_REQUEST['post_id']);
    foreach($sizes as $key => $value){
        if($type=='тип_записи'  &&  $value != 'имя_размера_изображений'){
            unset($sizes[$key]);
        }
    }
    return $sizes;
});

Как не сложно догадаться, вместо "тип_записи" вам нужно подставить название вашего типа слайдера (латиницей) и вместо "имя_размера_изображений" вам нужно указать зарегистрированное имя размера изображений.

Давайте рассмотрим на конкретном примере.

Предположим у нас есть новый тип записи Слайдер (его ярлык будет slider). Также у нас создан новый размер под изображения и называться он будет slider_image_940.
В итоге наш сниппет будет иметь следущий вид:

add_filter( 'intermediate_image_sizes', function($sizes){
    $type = get_post_type($_REQUEST['post_id']);
    foreach($sizes as $key => $value){
        if($type=='slider'  &&  $value != 'slider_image_940'){
            unset($sizes[$key]);
        }
    }
    return $sizes;
});
Данный сниппет, как обычно добавляется в файл functions.php вашего шаблона.
Разработка сайтов на WordPress Блог WordPress плагины и хаки Произвольный размер миниаютры для типа записи в WordPress