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

В ходе разработки и обслуживания сайтов часто возникает необходимость в создании миниатюр - уменьшенных копий изображений. В тексте страницы вместо большой картинки можно поместить такую копию, являющуюся ссылкой на исходный файл. Работа фотоальбомов и галерей изображений, менеджеров файлов в 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 миниатюры

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

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

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

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

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

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

Convenient way to create post thumbnails on the fly without server overload.

The best alternative to scripts like «thumbnail.php».

Supports Multisite.

Применение

The plugin for developers firstly, because it don’t do anything after install. In order to the plugin begin to work, you need use one of plugin function in your theme or plugin. Example:

Using the code in the loop you will get ready thumbnail IMG tag. Plugin takes post thumbnail image or find first image in post content, resize it and create cache. Also creates custom field for the post with URL to original image. In simple words it cache all routine and in next page loads just take cache result.

You can make thumbs from custom URL, like this:

The URL_TO_IMG must be from local server: by default, plugin don’t work with external images, because of security. But you can set allowed hosts on settings page: Settings > Media .

All plugin functions:

// return thumb url URL echo kama_thumb_src($args, $src); // return thumb IMG tag echo kama_thumb_img($args, $src); // return thumb IMG tag wraped with . A link of A will leads to original image. echo kama_thumb_a_img($args, $src); // to get image width or height after thumb creation echo kama_thumb($optname); // ex: echo "";

Примечания

    You can pass $args as string or array:

    // string kama_thumb_img("w=200 &h=100 &alt=IMG NAME &class=aligncenter", "IMG_URL"); // array kama_thumb_img(array("width" => 200, "height" => 150, "class" => "alignleft" "src" => ""));

    You can set only one side: width | height , then other side became proportional.

  1. src parameter or second function argument is for cases when you need create thumb from any image not image of WordPress post.
  2. For test is there image for post, use this code:

    If(! kama_thumb_img("w=150&h=150&no_stub")) echo "NO img";

Примеры

#1 Get Thumb

In the loop where you need the thumb 150х100:

Результат:

#2 Not show stub image

#3 Get just thumb URL

Result: /wp-content/cache/thumb/ec799941f_100x80.png

This url you can use like:

" alt="">

#4 kama_thumb_a_img() function

Результат:

#5 Thumb of any image URL

Pass arguments as array:

"http://yousite.com/IMAGE_URL.jpg", "w" => 150, "h" => 100,)); ?>

Pass arguments as string:

When parameters passes as string and «src» parameter has additional query args («src=$src &w=200» where $src = http://site.com/img.jpg?foo&foo2=foo3) it might be confuse. That’s why «src» parameter must passes as second function argument, when parameters passes as string (not array).

#6 Parameter post_id

Get thumb of post ID=50:

I don’t need plugin

This plugin can be easily used not as a plugin, but as a simple php file.

If you are themes developer, and need all it functionality, but you need to install the plugin as the part of your theme, this short instruction for you:

  1. Create folder in your theme, let it be ‘thumbmaker’ — it is for convenience.
  2. Download the plugin and copy the files: class.Kama_Make_Thumb.php and no_photo.jpg to the folder you just create.
  3. Include class.Kama_Make_Thumb.php file into theme functions.php , like this:
    require ‘thumbmaker/class.Kama_Make_Thumb.php’;
  4. Bingo! Use functions: kama_thumb_*() in your theme code.
  5. If necessary, open class.Kama_Make_Thumb.php and edit options (at the top of the file): cache folder URL/PATH, custom field name etc.
  • Conditions of Use — mention of this plugin in describing of your theme.

TODO

  • Лог stub файлов — чтобы узнать какие файлы были не найдены и на каких страницах
  • возможно очистить кэш отдельной картинки
  • брать заглушку из медиабиблиотки в настройках
  • указывать в альт название записи для kama_thumb_img(), если он пустой и есть ID записи? Но функция работате с URL поэтому альт не всегда можно указать правильно… Может юзать in_the_loop().

Скриншоты

Установка

Instalation via Admin Panel

  1. Go to Plugins > Add New > Search Plugins enter «Kama Thumbnail»
  2. Find the plugin in search results and install it.

Instalation via FTP

  1. Download the .zip archive
  2. Open /wp-content/plugins/ directory
  3. Put kama-thumbnail folder from archive into opened plugins folder
  4. Activate the Kama Thumbnail in Admin plugins page
  5. Go to Settings > Media page to customize plugin

Отзывы

Участники и разработчики

«Kama Thumbnail» - проект с открытым исходным кодом. В развитие плагина внесли свой вклад следующие участники:

Участники

Журнал изменений

2.8.13

  • NEW: фильтр pre_do_thumbnail_src .
  • NEW: Обработка SVG — если для создания миниатюры преедана ссылка на SVG файл, эта ссылка просто будет возвращена.

2.8.12

  • NEW: фильтр kama_thumb_src .
  • NEW: параметр stub_url .

2.8.11

  • FIX: Заметка в админке об очистке заглушек теперь показывается только админам.

2.8.10

  • FIX: Баг с нестандартными доменами например: domain.academy .

2.8.9

  • ADD: Хук kama_thumb_default_args .

2.8.8

  • FIX: Проверка строки при получении картинки. Иногда по URL может вернуться HTML код вместо данных картинки.
  • NEW: Авто-определение путей при интеграции плагина в тему или в MU плагины. Теперь для интеграции плагина в тему, плагин можно просто положить в папку темы и подключить в functions.php главный файл плагина.
  • DEL: Удалил фильтр kama_thumb_allow_admin_options_page . Теперь его работа базируется на фильтре kama_thumb_def_options , если он используется, то страница опций плагина автоматически отключается и опции указываются через этот фильтр.

2.8.7

  • FIX: Мелкие правки кода.
  • NEW: для kama_thumb_img() автоматически прописывается alt (бурется у вложения), если указан параметр attach_id .
  • NEW: Фильтр: kama_thumb_def_options — позволяет изменить опции по умолчанию (когда плаг ставиться не как плаг)
  • NEW: Фильтр: kama_thumb_allow_admin_options_page — позволяет отключить страницу опций в админке (когда плаг ставиться не как плаг)
  • NEW: Опция: auto_clear_days — каждые сколько дней очищать кэш

2.8.6

  • BUG: wrong resizing when rise_small option enabled and specified size smaller then the image one is.

2.8.5

  • BUG: on save of any type of post was created empty postmeta ‘photo_URL’, but it must be cleared only if it was exist before.

2.8.4

  • CHG: create_function() replaced with lambda function, in order to support PHP 7.2+

2.8.3

  • NEW: parameter ‘rise_small’. If set to false, when thumbnail will not become bigger if it size (width/height) is smaller than the specified size. Default: true — small thumbnails size increases.

2.8.2

  • IMP: function parse_main_dom() now understand localhosts and IP.

2.8.1

  • FIX: incorrect display on options page starting from WP 4.9.0

2.8.0

  • Bugfix: there was error if pass post object (WP_Post) in ‘post’ parameter…

2.7.9

  • CHG: rename filter start with ‘kmt_’ to ‘kama_thumb_’: ‘kmt_set_args’, ‘kmt_is_allow_host’, ‘kmt_img’, ‘kmt_a_img’ become ‘kama_thumb_set_args’, ‘kama_thumb_is_allow_host’, ‘kama_thumb_img’, ‘kama_thumb_a_img’.
  • minor fixes

2.7.8

  • ADD: hook ‘kama_thumb_inited’.
  • FIX: little logic confuse about trigger_error()

2.7.7

  • ADD: support for multisite — in MU plugin has it’s own options page in network settings menu. Child sites don’t have plugin options — it manages globally from network.
  • ADD: now all files creates in sub folders of main cache folder, to avoid folder overflow. SEO redirect from old location to new.
  • IMP: minor fixes: ‘meta_key’ option insurance. ‘debug’ option works only in WP_DEBUG mode. Code improvements.

2.7.6

  • FIX: if set ‘kama_thumb_a_img(‘w=200″, $src)’ where $src is empty. Plugin was tried generate image of current post, but in this case better to show ‘no_photo’ stub.

2.7.5

  • ADD: new parameters for adding attributes to A tag: ‘a_class’, ‘a_style’, ‘a_attr’ — kama_thumb_a_img("w=200 &a_class=foobar &a_style=display:block; &a_attr=") .

2.7.3 — 2.7.4

  • ADD: ‘crop’ parameter…
  • ADD: ‘attach_id’ parameter — ID of wordpress attachment image. Also, you can set this parametr by pass attachment ID to ‘src’ parament or in second parametr of plugin functions: kama_thumb_img("h=200", 250) or kama_thumb_img("h=200 &attach_id=250")
  • FIX: ‘class.Kama_Make_Thumb.php’ changes and fixes

2.7.2

  • ADD: ‘style’ parameter for ‘kama_thumb_img()’ and ‘kama_thumb_a_img()’ functions.

2.7.0 — 2.7.1

  • ADD: new function echo kama_thumb("width") — it allows to get real ‘width/height’ of image if width/height is empty. Or if we set ‘notcrop’ parameter and small image side will be resized proportionally and we don’t know the size beforehand.
  • CHG: default no_photo image changed.

2.6.3

  • CHG: confusing option ‘debug’ in class.Kama_Make_Thumb now turn on/off on settings page…
  • ADD: options sanitization on save for protection reasons…

2.6.1

  • NEW: languages dir removed from plugin

2.6.0

  • ADD: ‘yes_stub’ parameter for functions ‘kama_thumb_*()’. Useful when ‘no_stub’ set in option, but in special place we need the stub (no photo image)
  • ADD: New button on options page to clear all cache and delete metafields at once.
  • FIX: bug fix with ‘no_stub’ option. Right after plugin activation it worked incorrectly.

2.5.8

  • FIX: To support URL with HTML entity input src noe decodet with html_entity_decode() — ‘it`s-image.jpg’ > ‘it`s-image.jpg’

2.5.7

  • FIX: Supports to URL without protocols: //site.com/folder/image.png

2.5.6

  • FIX: removed two underscore ‘__’ from all classes methods. Because it reserved by PHP.

2.5.5

  • ADD: WP HTTP API to get IMG from URL.
  • ADD: ‘width’ & ‘height’ attributes for ‘kama_thumb_img()’ function for images with not specified ‘width’ or ‘height’ parameter (uses with ‘notcrop’ attribute)
  • BUG: If set ‘notcrop’ parameter and not set ‘height’ — PHP dies with fatal error…

2.5.4

  • ADD: thumb img in post content: now consider ‘srcset’ attribute if it’s set

2.5.3

  • FIX: regular about ‘mini’ class in IMG tag and now you can change ‘mini’ class

2.5.2

  • FIX: some minor fixes for plugin activation and uninstall

2.5.1

  • ADD: Cyrilic domain support — such URL will wokr ‘http://сайт.рф/img.jpg’.
  • ADD: ‘allow’ parameter from single function call fix — not work correctly.

2.5

  • ADD: New filters for Kama_Make_Thumb class: ‘kmt_set_args’, ‘kmt_is_allow_host’, ‘kmt_img’, ‘kmt_a_img’
  • ADD: Is allow host now checks for only main domain (not subdomain). Ex: now plugin works if you try create thumb of ‘http://site.com/img.png’ from ‘foo.site.com’ host
  • ADD: New parameter ‘allow’ — set allowed hosts for only current function call. Ex: kama_thumb_img(«w=200 &h=200 &allow=any», ‘http://external-domain.com/img.jpg’);

2.4.4

  • IMPROVE: Get file from remote domain not work properly if there were redirects…

2.4.3

  • FIX: mini class for IMG in content. Was output error if IMG inside and not inside A tag.

2.4.2

  • CHANGE: Kama_Make_Thumb class::get_src_and_set_postmeta() become publik. In order to just original get img url of post.
  • FIX: search img url in post content not worked with relative url like: «/foo.jpg», and not worked if img extension «jpeg»;
  • FIX: many times faster treatment in post content (regular expression fix);

2.4.1

  • FIX: parsing parametrs if it given as string. ex: «h=250 ¬crop &class=aligncenter» notcrop becomes «notcrop_»

2.4

  • FIX: If place second function parameter $src (img url) — it didn’t work correctly, because stupid mistake.
  • FIX: when use class ‘mini’ in post content and IMG already wrapped with A tag, plugin made double A wrap.
  • IMPROVE: Now self hosted images firstly parses as absolute path, and if there is error, it parses as URL. This method is much stable in some cases.
  • ADD: Place ‘any’ in alowed hostes string on settings page, and plugin will make thumbs from any domain.

2.3

  • Great Bug: Now if parameters passes as string ‘src’ parameter better pass as second argument of functions kama_thumb_*(«w=200 &h=300», ‘http://site.com/image.jpg’).

2.2

  • ADD: ‘attr’ parameter. Allow to pass any attributes in IMG tag. String passes as it is, without escaping.

2.1

  • ADD: aliases for passed parameters: src = url|link|img, post_id = post (can be passed as post object), q = quality, w = width, h = height
  • FIX: when parameters passes as string and «src» parameter has aditional query args («src=$src &w=200» where $src = http://site.com/img.jpg?foo&foo2=foo3) it might be confuse, that’s why «src» parameter must passes in the end of string, when parameters passes as string (not array).
  • CHG: some code refactoring in class.Kama_Make_Thumb.php file.
  • FIX: no_stub worked only for images from posts. When ‘src’ is setted parameter ‘no_stub’ had no effect;

2.0

  • ADD: notice message when no image library instaled on server (GD or Imagic)
  • ADD: diferent names for real thumb and nophoto thumb. And possibility to clear only nophoto thumbs from cache. All it needed to correctly create IMGs from external URLs (not selfhosted img) — sometimes it can’t be loaded external imges properly.

1.9.4

  • FIX: ext detection if img URL have querya rgs like *.jpg?foo

1.9.3

  • CHG: DOCUMENT ROOT detection if allow_url_fopen and CURL disabled on server

1.9.2

  • FIX: trys to get image by abs server path, if none of: CURL || allow_url_fopen=on is set on server

1.9.1

  • FIX: getimagesizefromstring() only work in php 5.4+

1.9.0

  • ADD: Images parses from URL with curl first

1.8.0

  • ADD: Images parses from URL. It FIX some bugs, where plugin couldn’t create abs path to img.
  • ADD: Allowed hosts settings. Now you can set sites from which tumbs will be created too.

1.7.2

  • CHG: Back to PHP 5.2 support 🙁

1.7.1

  • CHG: PHP lower then 5.3 now not supported, because it’s bad practice…

1.7

  • FIX: refactor — separate one class to two: «WP Plugin» & «Thumb Maker». Now code have better logic!

1.6.5

  • ADD: EN localisation

1.6.4

  • ADD: now cache_folder & no_photo_url detected automatically
  • ADD: notcrop parametr

Выводит html код картинки-миниатюры текущего поста.

Этот Тег шаблона должен использоваться внутри Цикла WordPress.

Дополнительный размер картинки, которую затем можно получить с помощью этой функции, можно создать через add_image_size() . По умолчанию доступны следующие размеры: thumbnail , medium , large , full , post-thumbnail .

✈ 1 раз = 0.001739с = очень медленно | 50000 раз = 6.79с = быстро | PHP 7.1.2, WP 4.7.3

Хуков нет.

Возвращает

null (ничего). Выводит на экран строку. Функция выводит на экран html код картинки или пустое значение (null), если картинки не существует.

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

$size(строка/массив)

Размер миниатюры, которую нужно получить. Может быть строкой: thumbnail , medium , large , full или массивом из двух элементов (ширина и высота картинки): array(32, 32) .

Когда указан массив, новая миниатюра с указанными размерами не создается. А WP ищет самый подходящий размер из тех что уже есть, берет его и просто указывает высоту и ширину в пикселях для тега IMG, чтобы уменьшить картинку. Т.е. картинка уменьшается только визуально.

По умолчанию: "post-thumbnail", размер который устанавливается для темы функцией set_post_thumbnail_size()

$attr(строка/массив)

Массив атрибутов, которые нужно добавить получаемому html тегу img .

Можно указать строкой: alt=альт&class=alignleft или массивом:

$default_attr = array("src" => $src, "class" => "attachment-$size", "alt" => trim(strip_tags($wp_postmeta->_wp_attachment_image_alt)),);

Атрибуты можно указывать любые.
По умолчанию: ""

Примеры

#1 Миниатюра как ссылка на пост

Пример 1: Используйте следующий код, чтобы сделать картинку-миниатюру ссылкой на пост. Пример для использования внутри Цикла WordPress:

" title="" >

#2: Сделаем миниатюру ссылкой на пост

Для этого используем хук post_thumbnail_html . В этом случае картинка будет ссылкой на пост сразу при вызове функции the_post_thumbnail(); . Код нужно добавлять в файл шаблона functions.php :

Add_filter("post_thumbnail_html", "my_post_image_html", 10, 3); function my_post_image_html($html, $post_id, $post_image_id) { $html = "" . $html . ""; return $html; }

#3 Миниатюра-ссылка на оригинальный размер

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

#4 Регистрация нового размера

С помощью add_image_size() можно зарегистрировать новый размер и затем получить его по ключу:

// допустим в functions.php мы регистрируем дополнительный размер так: add_image_size("spec_thumb", 360, 240, true); // далее в цикле выводим этот размер так: the_post_thumbnail("spec_thumb");