add_image_size() для определенных типов записей
set_post_thumbnail_size( 80, 80, true ); // true для всех типов записей
Предположим, у меня есть три типа записей в блоге: Посты, Видео и Товары. Мне может потребоваться размер изображения 80x80 для постов, 100x100 для видео и 50x100 для товаров. Насколько я знаю, я вынужден создавать миниатюры для изображений постов в размерах 100x100 и 50x100. А для товаров я должен создавать миниатюры 80x80 и 100x100, хотя я никогда не буду их использовать.
Существует ли способ создавать размеры изображений на основе типов записей, чтобы не генерировать кучу ненужных изображений и не тратить ресурсы впустую?

Невозможно задавать размеры изображений на основе типа записи, так как изображения еще не прикреплены к записи во время их загрузки и создания промежуточных размеров (когда вы добавляете их через "Новые медиафайлы", они вообще не прикреплены ни к какой записи).
Однако недавно я создал два плагина, которые вместе делают то, что вам нужно. Virtual intermediate images перехватывает создание промежуточных размеров изображений: они не создаются на диске, но все равно существуют в массиве метаданных. Это заставляет WordPress думать, что они существуют, и вы можете использовать их как обычные изображения. Сопутствующий плагин On-Demand Resizer создает отсутствующие размеры изображений по запросу. При первом запросе изображения оно создается, все последующие запросы будут обслуживаться уже созданным изображением.
Этим плагинам нужен рефакторинг перед тем, как я размещу их в каталоге плагинов WordPress, но они должны быть безопасны. Или, по крайней мере, содержат комментарии TODO
там, где есть проблемы с безопасностью.

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

Я придумал следующее решение. Оно создает изображения только для пользовательского типа записи, не создавая дополнительных. Единственная проблема в том, что если вы используете плагины, такие как Advanced Custom Fields, при попытке отобразить поле галереи показываются только стандартные размеры изображений WordPress: 'thumbnail', 'medium', 'large', и вы не можете получить доступ к созданным пользовательским размерам изображений для записи.
if ( function_exists ('add_image_size') ) {
function remove_default_img($sizes) {
unset( $sizes['medium']);
unset( $sizes['large']);
return $sizes;
}
add_filter('intermediate_image_sizes_advanced', 'remove_default_img');
$type = get_post_type($_REQUEST['post_id']);
// Размеры изображений для Custom_Post_Name ===================================
if ( $type === "Custom_Post_Name" || $post_type === "Custom_Post_Name" ) {
add_image_size('custom_size_img', 165, 249, true);
}
}
