add_image_size () для определенных типов записей

18
set_post_thumbnail_size( 80, 80, true ); // true for all post types

Предположим, у меня есть два типа постов в моем блоге: пост, видео и продукт. Возможно, мне понадобится размер изображения 80x80 для моих сообщений, но 100x100 для моих видео и 50x100 для моих продуктов. Насколько мне известно, я вынужден создавать миниатюры для своих сообщений Post размером 100x100, а также 50x100. А для своих продуктов я вынужден создавать миниатюры размером 80x80 и 100x100, хотя я никогда ими не буду пользоваться.

Есть ли способ создать размеры изображений, основанные на типах записей, чтобы в итоге вы не создали кучу изображений, которые вы не планируете использовать, и тратите ресурсы, которые можно было бы использовать в других местах?

Сэмпсон
источник
Я столкнулся с точно такой же потребностью.
MikeSchinkel
Что произойдет, если вы используете эту функцию image_resize в теме в тех частях, где вам нужен этот размер изображения?, Вы также можете написать сокращенную функцию для многократного использования в зависимости от контекста.
Кажется очевидным упущением для меня, неужели это еще не решено?
Натан Хорнби

Ответы:

12

Размеры изображений не могут быть основаны на типе сообщения, так как изображения еще не прикреплены к сообщению, когда вы загружаете их, и создаются промежуточные размеры изображения (когда вы просто добавляете их через «Новые медиа», они даже не прикрепляются на любой пост вообще).

Однако недавно я создал два плагина, которые вместе будут делать то, что вы хотите. Виртуальные промежуточные изображения будут перехватывать создание промежуточных размеров изображений: они не будут создаваться на диске, но все еще существуют в массиве метаданных. Это заставляет WordPress думать, что они существуют, поэтому вы можете использовать их как обычные изображения. Сопутствующий плагин On-Demand Resizer создаст недостающие размеры изображений, когда они будут запрошены. При первом запросе изображения оно создается, все последующие запросы будут обслуживаться только что созданному изображению.

Эти плагины нужно переписать, прежде чем я положу их в каталог плагинов WordPress, но они должны быть безопасными. Или, по крайней мере, есть TODOкомментарии, где они небезопасны.

Ян Фабри
источник
Ницца!
MikeSchinkel
2

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

goldenapples
источник
0

Я придумал следующее решение. Это создает изображения только для пользовательского типа сообщения без создания каких-либо дополнительных. Единственная проблема заключается в том, что если вы используете плагины, такие как расширенные настраиваемые поля, при попытке визуализации поля галереи отображаются только размеры изображений WordPress по умолчанию: «миниатюра», «средний», «большой», и вы не можете получить доступ к созданным пользовательским размерам изображений. ,

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']);
// Post_Name Image Sizes ======================================================
if ( $type === "Custom_Post_Name" || $post_type === "Custom_Post_Name" ) {
add_image_size('custom_size_img', 165, 249, true);
}

}

No0n
источник