Безнравственный thumbnails php. Get_the_post_thumbnail() — позволяет получить изображение миниатюры поста. #3 Миниатюра-ссылка на оригинальный размер

В ходе разработки и обслуживания сайтов часто возникает необходимость в создании миниатюр - уменьшенных копий изображений. В тексте страницы вместо большой картинки можно поместить такую копию, являющуюся ссылкой на исходный файл. Работа фотоальбомов и галерей изображений, менеджеров файлов в CMS немыслима без автоматического создания миниатюр. Мы разберем скрипт, генерирующий подобные миниатюры, и на его примере познакомимся с некоторыми возможностями PHP для работы с изображениями.

PHP обрабатывает изображения с помощью библиотеки GD. Почти на всех хостинговых площадках эта библиотека установлена. Если вдруг вам не повезло, обратитесь в техническую поддержку вашего хостинга. В нашем скрипте будем использовать функции, появившиеся в библиотеке GD версии 2.0.1.

Сначала определим требования, которым будет отвечать генератор миниатюр. Он должен создавать уменьшенные копии изображений, сохраненных в форматах GIF, JPEG и PNG. Если исходное изображение обладало прозрачностью, то и миниатюра должна сохранять прозрачность. Также не следует пренебрегать безопасностью и быстродействием.

Мы определились с тем, чего хотим. Теперь можно приступать к программированию. Исходный файл и размеры конечной картинки будем передавать через URL:

$width = isset($_GET["width"]) ? (int) $_GET["width"] : 0; $height = isset($_GET["height"]) ? (int) $_GET["height"] : 0; $max_size = isset($_GET["max_size"]) ? (int) $_GET["max_size"] : 0; $file_name = $_GET["file"];

Для указания размера миниатюры предусмотрим два способа. Можно задать параметр max_size , тогда размеры изображения на выходе будут пропорциональны исходным, но изменятся так, что его можно будет вписать в квадрат размером max_size*max_size . Можно также задавать размер изображения на выходе напрямую в параметрах width и height (при отсутствии одного из них картинка будет сжата пропорционально).

Договоримся, что скрипт будет генерировать миниатюры для файлов, расположенных в корневой директории веб-сервера или в поддиректориях. Для предотвращения несанкционированного доступа к другим файлам условимся, что параметр file в URL задает путь к файлу от корневой директории и начинается со знака "/" .

$file_name = str_replace("..", "", $file_name); $file_name = $_SERVER["DOCUMENT_ROOT"] . $file_name; if (!is_file($file_name)) { echo "Ошибка: файл не найден"; exit(); }

Рассмотрим функцию, которая будет выполнять основную задачу скрипта.

Function make_thumbnail($file_name, $thumb_width, $thumb_height, $max_size) {

Для начала получим информацию об исходном изображении:

$image_info = getimagesize($file_name);

Функция getimagesize возвращает массив $image_info , содержащий значения некоторых характеристик изображения:

  • $image_info и $image_info - это ширина и высота изображения,
  • $image_info - константа вида IMAGETYPE_XXX , определяющая формат файла (например, IMAGETYPE_GIF или IMAGETYPE_JPEG),
  • $image_info - строка "height="yyy" width="xxx"" , предназначенная для вставки в тег
  • $image_info["mime"] - mime-тип, соответствующий файлу.

В зависимости от mime-типа мы будем вызывать свою функцию для открытия и загрузки изображения: imagecreatefromGIF , imagecreatefromJPEG или imagecreatefromPNG .

Switch ($image_info["mime"]) { case "image/gif": if (imagetypes() & IMG_GIF) { $image = imagecreatefromGIF($file_name); } else { $err_str = "GD не поддерживает GIF"; } break; case "image/jpeg": if (imagetypes() & IMG_JPG) { $image = imagecreatefromJPEG($file_name); } else { $err_str = "GD не поддерживает JPEG"; } break; case "image/png": if (imagetypes() & IMG_PNG) { $image = imagecreatefromPNG($file_name); } else { $err_str = "GD не поддерживает PNG"; } break; default: $err_str = "GD не поддерживает " . $image_info["mime"]; } if (isset($err_str)) { return $err_str; }

Теперь нужно определить размеры миниатюры, если они не заданы явно.

$image_width = imagesx($image); $image_height = imagesy($image); //задано ограничение на высоту и ширину: if ($max_size) { if ($image_width

Функция imagecreatetruecolor создает полноцветное изображение указанного в параметрах размера и возвращает его идентификатор. imagealphablending позволяет выбрать один из двух способов работы с альфа-каналом. Если второй параметр этой функции установлен в true, то при рисовании полупрозрачным цветом новое изображение частично накладывается на старое. Если же он установлен в false, то происходит полное замещение пикселей исходного изображения на пиксели нового. Ясно, что нам нужен именно второй режим. Функция imagesavealpha необходима для того, чтобы при вызове функции imagePNG альфа-канал был сохранен в результирующее изображение.

$thumb = imagecreatetruecolor($thumb_width, $thumb_height); imagealphablending($thumb, false); imagesavealpha($thumb, true);

Теперь настало время вызвать функцию, которая и выполнит основную задачу этого скрипта. imagecopyresampled копирует прямоугольную область из первого изображения во второе. Она принимает на вход идентификаторы изображений, координаты верхнего левого угла области во втором изображении, координаты верхнего левого угла области в первом изображении, ширину и высоту области во втором изображении и ширину и высоту области во первом. Если размеры областей различны, копируемое изображение растягивается или сжимается. При этом применяется сглаживание, так что качество картинки остается удовлетворительным.

Следует отметить, что есть и другая функция, imagecopyresized , которая похожа на imagecopyresampled . Качество картинки, созданной imagecopyresized , трудно признать удовлетворительным, поскольку эта функция не производит сглаживание, но она работает быстрее. Поэтому в некоторых ситуациях вполне допустимо ее использовать.

Imagecopyresampled($thumb, $image, 0, 0, 0, 0, $thumb_width, $thumb_height, $image_width, $image_height);

ImagePNG($thumb); //освобождаем память imagedestroy($image); imagedestroy($thumb); }

На этом работу над скриптом можно было бы завершить. Действительно, собрав вышеприведенный код в один файл (при этом текст функции необходимо поместить в самом начале) и разместив в конце операторы

//промежуточный вариант! header("Content-Type: image/png"); make_thumbnail($file_name, $width, $height, $max_size);

мы получим работоспособный скрипт.

Следует отметить, что функция header устанавливает заголовки ответа сервера, и в данном случае она указывает на тип (картинка PNG) возвращаемых данных. Заголовок Content-Type , как и любые заголовки, необходимо устанавливать до операций вывода. Однако при работе с графикой устанавливать этот заголовок нужно как можно ниже, так как сообщения об ошибках, появляющихся после установки Content-Type: image/png не будут выводиться в браузер.

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

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

Рассмотрим, как можно сделать кеширование миниатюр. Мы будем сохранять их в файлы с именами, являющимися md5-хешами имен файлов с исходными изображениями, например, в папку img_cache в корневой директории веб-сервера.

Define ("IMG_CACHE", $_SERVER["DOCUMENT_ROOT"]."/img_cache/"); //для корректной работы filemtime clearstatcache(); //имя файла с кешем $cache_file_name = md5($file_name);

Определим время изменения файла с кешем, если он существует.

$cache_mtime = 0; if (is_file(IMG_CACHE . $cache_file_name)) { $cache_mtime = filemtime(IMG_CACHE . $cache_file_name); }

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

Наша функция make_thumbnail сразу отправляет миниатюру браузеру. Однако предварительно нужно сохранить миниатюру в кеш. Поэтому мы не должны вызывать функцию make_thumbnail непосредственно, так, как сделали это выше. Нужно перехватить вывод с помощью буферизации. После выполнения участка кода между ob_start и ob_end_clean в переменной $thumbnail будут содержаться те данные, которые функция imagePNG собиралась отправить браузеру, а в переменной $thumb_size - размер данных.

If ($cache_mtime

Стоит отметить, что в директории img_cache будут оставаться уменьшенные копии удаленных картинок. Поэтому при масштабном изменении структуры сайта кеш нужно очищать вручную.

Осталось установить заголовки и отправить миниатюру браузеру.

Header("Content-Type: image/png"); //время создания миниатюры header("Last-Modified: ".gmdate("D, d M Y H:i:s", $cache_mtime)." GMT"); header("Content-Length: ".$thumb_size); //вывод миниатюры в браузер echo $thumbnail;

Теперь нужно собрать участки кода в один файл, например, preview.php (разместив функцию make_thumbnail в начале) и поместить его в корневую директорию веб-сервера. Там же нужно создать директорию img_cache и установить права доступа к ней в 777. Всё готово!

Пусть изображение pict.jpg лежит в директории images, то есть его можно вставить на страницу с помощью кода . Тогда код, помещающий миниатюру, примет вид .

Разумеется, в этом скрипте можно реализовать и другие возможности. В статье была заложена основа, а остальное зависит от вашей фантазии.

$post_id (целое число ) ID поста, миниатюру которого нам нужно получить, по умолчанию — ID текущего пост из цикла. $size (строка|массив ) в этом параметре указываем размер миниатюры. Может принимать следующие значения:

  • thumbnail / medium / large — одно из стандартных размеров изображений, зарегистрированных в WordPress по умолчанию, данные размеры можно настроить в Параметры > Медиа,
  • full — оригинальное разрешение изображения — таким оно было загружено на сайт,
  • Можно указать собственные параметры ширины и высоты миниатюры в виде массива, например array(50, 30) . Обратите внимание, WordPress не будет создавать дубликат картинки под этот размер — вместо этого будет использоваться наиболее близкий по разрешению зарегистрированный размер картинки, подогнанный под ваши параметры с сохранением оригинальных пропорций.

    Чтобы было понятнее, приведу пример. Предположим, в качестве этого аргумента мы указали array(50, 30) . У меня самый близкий размер будет 125×125 (thumbnail) — URL этой картинки и будет вставлен в атрибут src . Окей, а что с пропорциями? Так как 125×125 — это квадрат, то и наша миниатюра будет квадратной, она впишется по наименьшему параметру, т.е. результат будет 30×30.

  • Один из собственных размеров изображений, зарегистрированных через функцию .
$attr (массив ) массив переопределяемых атрибутов тега , через него можно переопределить следующие HTML-атрибуты:
  • src — если вам надо, можете даже заменить URL картинки.
  • class — класс тега , по умолчанию имеет следующие классы wp-post-image и attachment-{размер изображения} .
  • alt — по умолчанию trim(strip_tags($attachment->post_title)) — указывается в админке при загрузке/редактировании медиафайла.
  • title — по умолчанию trim(strip_tags($attachment->post_excerpt)) .

Пример 1

Простой пример — просто выведем миниатюру поста с ID = 5:

echo get_the_post_thumbnail( 5 , "thumbnail" ) ; //

Пример 2. Как сделать миниатюры с ссылками на пост?

Предположим, мы хотим реализовать это на страницах категорий. Давайте немного доработаем цикл:

while ( have_posts() ) : the_post() ; if ( has_post_thumbnail() ) : echo "ID ) . "">" . get_the_post_thumbnail( $post ->ID , "thumbnail" ) . "" ; endif ; echo "ID ) . "">" . $post ->post_title . "" ; endwhile ;

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

Пример 3. Как сделать, чтобы при клике на миниатюру, открывалась полная версия картинки?

Код из этого примера отлично подойдет для использования в каком-нибудь плагине jQuery, например fancybox или pretty photo. В таком случае вам возможно также понадобится добавить класс для ссылки.

Вы также можете ознакомиться с документацией функций и на моем блоге.

Пример 4. Используем третий параметр $attr для изменения класса миниатюры

Давайте добавим на наши миниатюры класс align-left типа для того,чтобы они обтекались текстом слева:

Фильтр post_thumbnail_size

Фильтр позволяет задать размер миниатюр, используемых на блоге (везде на блоге).

А теперь пример со следующим условием: для всех миниатюр на блоге, которые выводятся через функцию get_the_post_thumbnail() с параметром $size равным thumbnail заменяем размер на medium , остальные размеры миниатюр не трогаем:

Количество параметров данного фильтра не может не радовать, это означает, что мы можем творить с возвращаемым HTML-кодом всё, что нам угодно.

$html (строка ) HTML-код, возвращаемый функцией по умолчанию, $post_id (целое число ) ID поста, миниатюру которого нужно получить, $post_thumbnail_id (целое число ) ID миниатюры, $size (строка|массив ) размер миниатюры, $attr (массив ) массив HTML-атрибутов, которые были заданы при вызове функции, если не заданы, то пустой массив;

А теперь несколько интересных примеров.

Пример 1. Автоматическое проставление ссылок на пост

Фишка в том, что каждый раз при использовании функции get_the_post_tumbnail() миниатюры уже будут возвращаться с автоматически проставленными ссылками на пост.

function true_auto_linking( $html , $post_id , $post_thumbnail_id , $size , $attr ) { return "" . $html . "" ; } add_filter ("post_thumbnail_html" , "true_auto_linking" , 10 , 5 ) ;

Круто, да? А главное — всё очень просто.

Пример 2. Возвращаем только URL миниатюры

Миша Рудрастых

Если вам нужна помощь с вашим сайтом или может даже разработка с нуля - .

Продолжая тему wordpress миниатюр (thumbnail), хочу рассмотреть очень полезный плагин, который здорово может облегчить работу в некоторых ситуациях. Представьте, что вы вели блог несколько лет, скажем, начали где-то в 2009, а теперь хотите модернизировать внешний вид (шаблон), добавив современных опций на сайте, например, те же . Учитывая, что поддержка thumbnail в wordpress была введена значительно позже, картинки у вас, судя по всему, находятся внутри статьи прямо в тексте.

Получается, что у вас есть 2 варианта решения задачи — использовать либо вручную для каждой статьи создавать миниатюры. В первом случае появляется ощущение «вынужденного» и не совсем оптимального решения, второй и вовсе может заставить вас потратить 4-5 часов на возню с картинками. К счастью, недавно нашел еще и третий вариант — плагин Auto Post Thumbnail .

Данный модуль позволяет генерировать миниатюры (thumbnails) из первой картинки в тексте для любых постов блога или записей пользовательских типов. Если первое изображение не найдено, плагин автоматически продолжит поиск пока миниатюра не будет создана. В том случае, если для записи thumbnails уже установлено, просто ничего не произойдет. Короче говоря, принцип работы предельно прост и логичен. Кстати, если же по каким-то причинам вы хотите запретить формирование миниатюры для того или иного поста, тогда создаете произвольное поле (custom field) skip_post_thumb в соответствующей записи.

Установка плагина элементарна и выполняется как всенла: классический метод путем скачивания файлов модуля с официального сайта , его распаковки и загрузки на ФТП в директорию /wp-content/plugins/ с последующей активацией в разделе «Плагины» из админки; либо в пункте меню «Добавить плагин» ищите модуль по названию «Auto Post Thumbnail», где скачиваете и активируете его. Вот и все!

После установки у вас появится новый пункт меню — Auto Post Thumbnail , где имеется всего одна кнопка для начала работы — Generate Thumbnails. Там же указано примечание, о котором я говорил выше — перед запуском просят установить произвольные поля skip_post_thumb для постов, где не хотите ничего генерировать. Если таковых нет, просто кликаем по кнопке.

О ходе процесса обработки всех постов блога будете проинформированы с помощью специального статусбара. После завершения обработки увидите соответствующее уведомление. Похожая автогенерация миниатюр проводится при изменении , но там для этих целей используют Regenerate Thumbnails.

Можете пройтись по постам дабы убедиться в правильности работы данного плагина. Также советую проверить внешний вид блога и насколько корректно отображаются посты. Есть вероятность что для выбранного wordpress шаблона у вас по умолчанию в коде было добавлено отображение миниатюр. В итоге получится что-то вроде этого (когда выводится и картинка из поста, и thumbnail):

Первое, о чем могли подумать — нужно удалить картинки из постов. Но не спешите этого делать, а то получается опять лишняя работа — можно было изначально тогда не запускать плагин, а пройтись по всем статьям блога вручную меняя картинку на миниатюру. Дабы исправить эти ошибки, мы просто внесем некоторые правки в шаблон.

Во-первых, открываете файлы, которые отвечают за отображение списка постов блога — index.php, home.php либо archive.php, catagory.php, tag.php, где находим функцию отображения текста the_content (я упоминал о ней в посте про ) и меняем ее на:

Этот код отобразит краткий анонс поста блога без выделений и картинок исключительно в текстовом виде. Дальше в файле шаблона для отображения полного текста заметки (single.php) мы наоборот находим функцию миниатюр the_post_thumbnail и удаляем уже ее. Как правило, она выводится со следующим кодом:

"alignleft post_thumbnail" ) ) ; } ?>

"alignleft post_thumbnail")); } ?>

В итоге должно получится, что на всех страницах со списками новостей будут отображать миниатюры + краткий текст, а на полных записях — все то оформление и изображения, которые вы задаете в редакторе. Решение, я считаю, достаточно гибкое, а плагин Auto Post Thumbnail работает на отлично! Кстати, если вы покупаете сайты и приходится иногда переделывать откровенные ГС в более-менее красивые проекты, данный модуль точно пригодится — могу сказать по личному опыту. Хотя, в принципе, есть еще один вариант решения задачи — это но там больше кода и нужно в нем ориентироваться получше.

Flector 5

Это маленький, но весьма полезный плагин, чьей единственной функцией является перегенерация миниатюр в блоге. Любое изменение размера миниатюр в настройках блога коснется лишь новых залитых вами картинок, а все старые картинки останутся с прежними размерами. А что делать, если вы сменили шаблон блога на тот, в котором дизайн заточен под определенный размер миниатюр? Вот тут то вам и понадобится данный плагин. Установили плагин, перегенерировали миниатюры в нужном размере и все, плагин можно удалять. И не стоит бояться экспериментировать с новыми шаблонами и разными размерами миниатюр – плагин создает новые миниатюры, не удаляя при этом старые. Таким образом, вы всегда можете откатиться на свой изначальный шаблон без какого-либо ущерба (ну кроме лишних картинок в папке загрузок) для своего блога.

1 Распаковываем архив.

2 Копируем папку regenerate-thumbnails в /wp-content/plugins/ .

3 Заходим в админку блога на вкладку "Плагины " и активируем плагин.

Никаких настроек в плагине нет. Так что не забываем сначала зайти в "Параметры\Медиафайлы " и установить нужные вам размеры миниатюр.

После этого у нас есть два варианта:

1 Перегенерация всех картинок сразу. Зайдите в "Инструменты\Regen. Thumbnails " и нажмите кнопку "Regenerate All Thumbnails ":

Теперь вам остается лишь ждать, пока плагин пересоздаст все миниатюры. Это может занять от нескольких секунд до десятков минут в зависимости от количества картинок. Сотня картинок пересоздается примерно одну минуту.

2 Перегенерация избранных картинок. Можно пересоздать лишь выбранные картинки, для этого зайдите в библиотеку медиафайлов. Там вы сможете перегенерировать или несколько картинок сразу или каждую по отдельности:

В шаблоне миниатюры могут выводиться или с относительными размерами или с точно определенными размерами. Относительные размеры (миниатюра, средняя, крупная) означают, что шаблон выведет картинки ровно в тех размерах, которые указаны в настройках блога. Независимо от того, впишутся ли картинки в этих размерах в дизайн шаблона или нет.

Функция the_post_thumbnail (которую вы можете найти в файле index.php в папке шаблона) при этом выглядит примерно так:

the_post_thumbnail("thumbnail"); // миниатюра (150 на 150) the_post_thumbnail("medium"); // средняя (300 на 300) the_post_thumbnail("large"); // большая (640 на 640) the_post_thumbnail("full"); // полная (без ограничений)

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

the_post_thumbnail( array (500 , 150 ) ) ; // 500 на 150

the_post_thumbnail(array(500,150)); // 500 на 150

Именно эти размеры вы и должны указать в настройках блога, а потом пересоздать картинки именно с этими размерами. Только в таком случае шаблон будет выглядеть именно так, как задумал его автор. Если вы не укажите эти размеры в настройках блога, то будет выведена картинка максимально близкая к указанным размерам. На деле это означает, что вместо этого:

Будет выведено вот это:

Пример, конечно, надуманный. Но, тем не менее, он наглядно показывает, что дизайнер мог иметь ввиду одно, а получается совсем другое только потому, что у вас миниатюры заданы не тех размеров, которые использовал автор шаблона. В данном случае записи вообще налезают друг на друга и портят дизайн напрочь. Многие шаблоны так и отбрасываются пользователями, которые просто не могут понять, что кривизна дизайна этих шаблонов вызвана неправильными размерами миниатюр, а вовсе не кривыми ручками их авторов.

В недалеком прошлом, когда я был совсем еще зеленым в мире программирования, в тот зимний вечер, я трудился над своим первым шаблон для WordPress. Мне нужно было настроить вывод миниатюр к записям. К тому моменту я уже познакомился с рядом шаблонов для WordPress, в которых встречалась реализация этой задачи. А реализовывалась она посредством, наверняка, известного вам скрипта timthumb.php (создает уменьшенную копию изображения по передаваемой ссылке на это самое изображение). Скрипт этот я конечно в итоге прикрутил к шаблону и был доволен результатом, но это продолжалось недолго.

Все работало нормально: вставляешь в запись изображение, брешь ссылку на него и добавляешь её в, специально созданное произвольное поле. В шаблоне ссылка с этого поля считывается и по ней создается миниатюра. Но спустя какое-то время, постоянное копирование ссылки и добавление её в произвольное поле, стало для меня утомительным занятием - рутина. К тому же бывало, что я вообще забывал вставить эту пресловутую ссылку и после публикации приходилось возвращаться к редактированию записи. Знакомо?

В итоге, я написал функцию, которая ищет изображение в посте, вырезает из него ссылку и создает произвольное поле для этого поста и все это автоматически автоматически. Позднее эта функция претерпела некоторые изменения, а потом еще, и в итоге получился плагин, с которым вы можете познакомиться ниже.

О плагине создания миниатюр для WordPress

После активации, плагин ничего не делает, чтобы он начал работать нужно будет редактировать шаблон (вызывать функции в том месте, где необходимы миниатюры изображений). Если просто установить и активировать плагин, он ничего делать не будет!

В целом, скрипт очень похож на timthumb.php, однако отличается и в чем-то лучше:

  1. Не нужно вручную создавать произвольное поле со ссылкой на картинку. Поле создается автоматически.
  2. Работает немного быстрее timthumb.php (timthumb.php – универсальный скрипт и поэтому там много лишних операций-проверок);
  3. Ссылка на картинку будет выглядеть валидно /images/название файла.jpg , а не /functions.php?src=/images/название файла.jpg&w=100&h=100&q=80;
  4. Кэш чиститься по необходимости. В timthumb.php кэш постоянно проверяется, старые файлы удаляются. На проверку уходят ресурсы (мелочь, но все же). На этом можно можно безболезненно сэкономить;
  5. Ресайзинг можно использовать прямо в посте, указав картинке class mini и нужные размеры;
  6. Гораздо удобнее использовать при интеграции в тему WordPress: не нужно получать значение произвольного поля, проверять существует ли поле, чтобы вывести картинку заглушку. Все это будет делаться автоматом.
  7. На timthumb.php много хакерских атак, что, если не позволит взломать сайт, то привлечет лишнее внимание хакеров и нагрузку на сервер.

Принцип работы Kama Thumbnail

Создает папку кэша: wp-content/cache/thumb . В нее будут создаваться миниатюры.

При публикации или обновлении поста, плагин ищет ссылку на оригинал картинки и записывает её в произвольное поле поста, затем в теме по этой ссылке создается миниатюра. Ссылка определяется в следующем порядке:

  1. Если у поста установлена миниатюра WordPress, её ссылка будет взята;
  2. Если в тексте поста есть картинка, её ссылка будет взята. Если эта картинка является анкором ссылки на увеличенный вариант этой картинки, то будет взят УРЛ ссылки;
  3. Если у поста нет ни миниатюры WP ни картинки в тексте, то плагин проверит нет ли у поста загруженной для него картинки (вложения). Если вложение есть, то ссылка будет взята от туда;
  4. Если ничего не найдено, то в произвольное поле будет добавлена запись-заглушка: “no_photo”. Нужно это, чтобы не производить каждый раз эти операции по поиску ссылки.

При удалении плагин удаляет за собой все: произвольные поля, опции в базе данных, кэш картинок, папку кэша.

Скачать плагин

Установка

  1. Распакуйте архив в каталог плагинов /wp-content/plugins , активируйте плагин в админ-панели. Или установите плагин из админ-панели WordPress: Плагины > Добавить новый > Загрузить > Выбрать > Установить.
  2. Настройте плагин на странице админ-панели: Настройки > Медиафайлы (Settings > Media) . Рекомендую там в базовых настройках WP выставить нули у большого размера “большой размер (Large size)” и сделать размер поменьше у среднего размера “Средний размер (Medium size)” (например: 150 х 100). Нужно это, чтобы при загрузке изображения WP не создавал лишних размеров изображений. Эту функцию заменит данный плагин.

Блок настроек плагина на странице “медиафайлы” (media):

Использование

После установки плагина в шаблоне можно использовать функции:

  • kama_thumb_src($args) – возвращает ссылку на созданную миниатюру
  • kama_thumb_img($args) – возвращает готовую картинку (img тег)
  • kama_thumb_a_img($args) – возвращает ссылку-картинку. Ссылка ведет на оригинал картинки.

Аргументы $args:

  • w или width – ширина миниатюры (обязательный)
  • h или height – высота миниатюры (обязательный)
  • q – качество сжатия jpg (по умолчанию 85. макс.100)
  • src – ссылка на оригинал картинки, который нужно уменьшить. В этом случае, картинка не будет парсится из контента.
  • alt – alt атрибут картинки
  • title - title атрибут картинки
  • class – class атрибут картинки. Укажите класс mini и нужные размеры, чтобы создать миниатюру к картинке в статье.
  • no_stub – указываем, если не нужно выводить заглушку. Вместо нее будет возвращен пустой результат.
  • post_id – идентификатор поста. Его нужно передавать, когда функция вызывается не из Цикла WordPress (например, внутри какой-нибудь функции) или, когда переменная $post определяется неправильно (например, определяется картинка от другой записи или еще какие-нибудь глюки). Если передать этот параметр, то скрипт будет точно знать какой пост обрабатывать. Если этот параметр не передан, то будет обрабатываться пост, находящийся в текущий момент (когда вызывается функция) в переменной $post.

Заметки:

  1. Параметры можно указывать:

    // строкой kama_thumb_img("w=200 &h=100 &alt=название картинки &class=aligncenter"); // или массивом kama_thumb_img(array("width" => 200, "height" => 150, "class" => "alignleft"));

  2. Можно указать только ширину или высоту, тогда противоположная сторона (высота или ширина) будут подобраны пропорционально уменьшенной копии;
  3. Параметр src нужен для случаев, когда нужно создать миниатюру, без использования произвольных полей (взять любую картинку и создать миниатюру к ней).
  4. Если нужно проверить есть ли у поста картинка и если нет, то сделать что-то другое, то используйте такой код:

    $img = kama_thumb_img("w=150&h=150&no_stub"); if(! $img) echo "Картинки нет";

    $ img = kama_thumb_img ("w=150&h=150&no_stub" ) ;

    if (! $ img )

    echo "Картинки нет" ;

Миниатюра картинки в тексте статьи (шоткод)

Если в статье нужно уменьшить картинку и сделать её ссылкой на оригинал, то укажите картинке класс mini и задайте нужные размеры (width или height).

Например, мы вставили картинку в статью:

Но нам не нужна такая большая картинка в статье и мы хотим её уменьшить не визуально, а реально, тогда добавляем к ней класс mini и указываем нужные размеры:

300 ” />

Высота, которую мы удалили будет подобрана автоматически, пропорционально.

Такой подход – не использовать шоткод, мне показался удобнее: мы можем создавать миниатюры к картинкам и при этом видеть как картинка выглядит при редактировании поста, также при возможном удалении плагина, картинки в постах по-прежнему будут показываться (не останется непонятный шоткод).

Чтобы картинка миниатюра создавалась, эта опция должна быть включена в настройках.

Примеры использования

#1 Получаем миниатюру

Внутри цикла WordPress, где нужна миниатюра к посту, с размерами 150х100, используем такой код:

& lt ; ? php echo kama_thumb_img ("w=150 &h=100 &class=alignleft myimg" ) ; ? & gt ;

В результате на месте этого кода появится готовый тег :

#2 Не выводим картинку-заглушку

Чтобы картинка-заглушка не выводилась, если у записи нет картинок, то нужно определить параметр no_stub:

Вернет УРЛ миниатюры: /wp-content/cache/thumb/ec799941f_100x80.png . Этот УРЛ можно использовать, например, так:

" alt="" />

& lt ; img src = "" alt = "" / & gt ;

Если нужно сделать миниатюру, как картинку, кликнув на которую откроется большое изображение, то используйте такой код:

& lt ; ? php echo kama_thumb_a_img ("w=150 &h=100 &class=alignleft myimg &q=75" ) ; ? & gt ;




Top