set_post_thumbnail_size vs add_image_size - в чем разница?
В чем разница между set_post_thumbnail_size и add_image_size? set_post_thumbnail_size применяется ко всем изображениям, а add_image_size для индивидуальных размеров изображений?
Спасибо.

Когда изображение загружается в WordPress, оно сохраняется в исходном размере, а также создаются уменьшенные копии в разных размерах. Это позволяет легко использовать разные размеры одного изображения для различных целей.
По умолчанию WordPress создает 3 копии в 3 разных размерах:
'thumb'
'medium'
'large'
Размеры в пикселях для этих 3 вариантов можно настроить в панели управления WordPress, в меню Настройки -> Медиафайлы
.
Функция add_image_size
используется для регистрации нового размера, который добавляется к 3 стандартным.
Каждый зарегистрированный размер можно получить по его имени в некоторых функциях WordPress, например, wp_get_attachment_image_src
, wp_get_attachment_image
, wp_get_attachment_link
.
Все эти функции принимают параметр $size
, который должен быть именем одного из зарегистрированных размеров (одного из 3 стандартных или пользовательского, созданного через add_image_size
).
Если в качестве аргумента $size
указано 'full'
, возвращается оригинальное изображение без изменения размера.
Помимо упомянутых функций, есть еще две, которые используют размеры изображений: get_the_post_thumbnail
и the_post_thumbnail
.
Эти две функции получают (первая) и выводят (вторая) изображение, установленное как "Изображение записи" (Featured Image).
Что возвращается (или выводится) этими функциями — это полноценный HTML-тег img
, например:
<img scr="http://www.example.com/wp-content/2013/08/image-200x200.jpg" />
Итак, какой размер используется?
Если $size
передан как второй аргумент (первый — $postid
), то эти функции возвращают изображение в указанном размере. В противном случае они ищут размер изображения, зарегистрированный под именем: post-thumbnail
.
Это не один из 3 стандартных размеров, а четвертый (пятым считается full
), и вы можете зарегистрировать его с помощью функции set_post_thumbnail_size
.
Таким образом,
set_post_thumbnail_size( $width, $height, $crop );
это сокращение для
add_image_size( 'post-thumbnail', $width, $height, $crop );
Если вы не вызывали set_post_thumbnail_size
(что означает, что размер 'post-thumbnail'
не создан), WordPress будет использовать размер thumb
, а если и он недоступен — оригинальное изображение без изменения размера.
Регистрация пользовательских размеров изображений может быть очень полезна при разработке темы, но важно не злоупотреблять: каждое загруженное изображение копируется и изменяется под все зарегистрированные размеры, поэтому создание множества размеров значительно замедлит процесс загрузки изображений.
Примечание:
Учтите, что когда WordPress создает уменьшенные копии изображения, он никогда не увеличивает его, а только уменьшает: например, если оригинальное изображение имеет размер 400x500px, а размер 'medium' установлен как 800x600px, то размер 'medium' и больше не создаются.
Поэтому регистрация размера изображения не гарантирует, что файл изображения для каждого зарегистрированного размера фактически существует в папке контента WordPress. Тем более что зарегистрированные размеры легко меняются: изменение настроек, смена темы и т.д.
Когда размер изображения меняется по любой причине, это влияет только на изображения, загруженные после этого изменения; изображения, загруженные ранее, не меняют свои размеры и не пересоздаются.
Если вам нужно полагаться на определенные размеры изображений после того, как некоторые изображения уже загружены (например, после смены темы), плагин Regenerate Thumbnails станет вашим спасением.

Отлично. Я бы нажал 5 раз из-за вашего ответа, но сайт не позволяет. Спасибо.

Еще один вопрос: что если я не вызывал set_post_thumbnail_size (что означает, что размер 'post-thumbnail' не создан), а затем вызываю the_post_thumbnail. Что произойдет? (потому что the_post_thumbnail попытается использовать post-thumbnail в качестве параметра).

Этот ответ очень полезен! Однако, я считаю, что вот это:
set_post_thumbnail_size( 150, 150 ); Если вы не вызывали set_post_thumbnail_size (что означает, что размер 'post-thumbnail' не создан), WordPress будет использовать размер thumb, и если даже этот размер недоступен, WordPress будет использовать оригинальное изображение без изменения размера.
...неверно. По моему опыту тестирования, если set_post_thumbnail_size()
не был вызван, WP использует изображение в полном размере.

Из Codex:
set_post_thumbnail_size
Устанавливает размеры изображения записи по умолчанию (ранее известного как миниатюра записи). Для регистрации дополнительных размеров изображений используйте: add_image_size().
add_image_size
Регистрирует новый размер изображения. Это означает, что WordPress будет создавать копию изображения записи (ранее известного как миниатюра записи) с указанными размерами при загрузке нового изображения.
