
Сегодня поделюсь, очередным своим плагином, который создает миниатюры для записей в WordPress.
Преамбула
В недалеком прошлом, когда я был совсем еще зеленым в мире WordPress и программирования. В тот зимний вечер, когда я трудился над своим первым шаблон для WordPress, мне нужно было настроить вывод миниатюр к записям. К тому моменту я уже познакомился с рядом шаблонов для WordPress, в которых встречалась реализация этой задачи. А реализовывалась она посредством, наверняка, известного вам скрипта timthumb.php (создает уменьшенную копию изображения по передаваемой ссылке на это самое изображение). Скрипт этот я конечно в итоге прикрутил к шаблону и, по началу, был доволен результатом.
Работало все как и принято: вставляешь в запись изображение, брешь ссылку на него и добавлял её в специально созданное под это дело произвольное поле. В шаблоне, ссылка с этого поля считывается и по ней создается миниатюра.
Спустя какое-то время, постоянное копирование ссылки и добавление её в произвольное поле, стало для меня адским трудом, потому что — это самая настоящая рутина. К тому же, бывало что я вообще забывал вставить эту пресловутую ссылку и после публикации приходилось возвращаться к редактированию записи. Вам такое не знакомо? Знакомо? Все это осложнялось еще и тем, что для некоторых записей использовались шоткоды NextGen Gallery, а по шоткоду узнать ссылку на картинку проблематично, там ведь id указывается...
Опираясь на все вышесказанное и недосказанное, я написал функцию, которая ищет изображение в посте, вырезать из него ссылку и создает произвольное поле для этого поста автоматически. Позднее эта функция претерпела некоторые изменения, а потом еще и буквально вчера, получился плагин, с которым вы можете познакомиться ниже.
О плагине создания миниатюры на WordPress
Забегая вперед предупрежу, что после активации плагин ничего не делает, чтобы он начал работать нужно будет редактировать шаблон (вызывать функции в том месте, где необходимы миниатюры изображений).
Оформить скрипт в виде плагина, было необходимо, потому что для его работы нужна папка, куда будут создаваться (кэшироваться) копии изображений, а так же нужен был файл заглушка (картинка, если фотка в записи не найдена). А вообще, этот скрипт можно легко подключить через functions.php (если сами делаете шаболон(ы) будет полезно).
В целом, скрипт очень похож на timthumb.php, однако отличается и в чем-то лучше:
- Не нужно вручную создавать произвольное поле со ссылкой на картинку. Поле создается автоматически. Также скрипт понимает шоткод NextGen Gallery [singlepic данные];
- Работает немного быстрее timthumb.php (timthumb.php - универсальный скрипт и поэтому там много лишних операций-проверок данных);
- Ссылка на картинку будет выглядеть HTML валидно
/images/название файла.jpg, а не/functions.php?src=/images/название файла.jpg&w=100&h=100&q=80; - Кэш чиститься по необходимости. В timthumb.php кэш постоянно проверяется, старые файлы удаляются. На проверку уходят ресурсы (мелочь, но все же), которые думаю можно без болезненно сэкономить;
- Ресайзинг можно использовать в посте через шоткод;
- Гораздо удобнее использовать при интеграции в WordPress тему: не нужно получать значение произвольного поля, проверять существует ли поле, чтобы вывести картинку заглушку. Все это будет делаться автоматом.
Принцип работы Kama Thumbnail
Если в вызываемую функцию прямо не передана ссылка на картинку, и миниатюра вызывается из цикла WordPress, то сканируется контент на наличие картинки, если картинка найдена, то создается произвольное поле и её мини-копия.
В будущем, после того, как произвольно поле создано, контент сканироваться уже не будет, пока это поле существует.
Если в контенте картинка не найдена, также, создается произвольное поле со значением no_photo. Делается это для того, чтобы не сканировать постоянно контент на наличие в нем картинки (своего рода заглушка).
Установка
Ставиться все как обычно: копируем папку kama-thumbnail в каталог/wp_content/plugins и активируем плагин в админке. На вложенную папку thumb нужно поставить права на запись 777, а то миниатюры создаваться не смогут.
После установки необходимые функции плагина доступны в шаблоне.
Также можно установить "плагин" внедрением файла kama_thumbnail.php в файл шаблона functions.php, например, так: скопировать kama_thumbnail.php в папку с шаблоном и добавить такую строчку в ваш functions.php
include('kama_thumbnail.php');
После этого нужно будет открыть kama_thumbnail.php и определить там переменные:
- $kt_cache_folder – каталог куда будут создаваться миниатюры (нужны права доступа 777);
- $link_to_no_photo – ссылка на картинку-заглушку.
Скачать плагин
Использование
Доступные в шаблоне (теме) WordPress функции:
- kama_thumb_src($args) – возвращает ссылку на созданную миниатюру
- kama_thumb_img($args) – возвращает готовую картинку (img тег)
- kama_thumb_a_img($args) – возвращает ссылку-картинку. Ссылка ведет на оригинал картинки.
Параметры, передаваемые функциям:
- w – ширина миниатюры (обязательный)
- h – высота миниатуюры (обязательный)
- q – качество сжатия jpg (по умолчанию 80. макс.100)
- src – ссылка на оригинал картинки, который нужно уменьшить (обязателен для шоткода)
- alt – alt атрибут картинки
- class – class атрибут картинки
- no_stub – указываем, если не нужно выводить заглушку. Вместо нее будет возвращен пустой результат
- post_id - идентификатор поста. Его нужно передавать, когда функция вызывается не из Цикла WordPress (например, внутри какой-нибудь функции) или, когда переменная $post определяется неправильно (например, определяется картинка от другой записи или еще какие-нибудь глюки). Если передать этот параметр, то скрипт будет точно знать какой пост обрабатывать. Если этот параметр не передан, то будет обрабатываться пост, находящийся в текущий момент (когда вызывается функция) в переменной $post.
Примечание:
- Можно указать только ширину, тогда высота будет подобрана пропорционально уменьшенной копии. Так же, можно указать только высоту, ширина будет аналогично подобрана;
- src нужен для тех случаев, когда нужно получить/создать миниатюру, без использования произвольных полей (взять любую картинку и создать миниатюру к ней).
- Каталог с создаваемыми миниатюрами автоматически очищается каждые 3 дня. Проверка на необходимость очистки происходит, когда пользователь находится в админ-панели.
Шоткод
В посте можно использовать такой шоткод:
[thumb=ссылка на картинку w=Ширина h=высота alt=Текст class=CSSкласс q=качество]
Обязательные параметры: thumb и h или w.
Примеры создания миниатюр
Создаем миниатюру, произвольное поле и получаем ссылку на миниатюру
В шаблоне используем такой вызов функции:
<?php echo kama_thumb_src ('w=100 &h=80 &q=75'); ?>
вернет ссылку на миниатюру. Можно использовать, например, так:
<img src='<?php echo kama_thumb_src ('w=100 &h=80 &q=75'); ?>' alt='' />
Сразу получаем миниатюру
Внутрь цыкла WordPress, там где нужна миниатюра, вставляем такой код:
<?php echo kama_thumb_img('w=150 &h=100 &class=alignleft myimg &q=75'); ?>
В результате на месте этого кода появится:
<img src='ссылка на миниатюру' alt='' class='alignleft myimg' width='150' height='100' />
Чтобы картинка-заглушка не выводилась, если у записи нет картинок, то нужно определить параметр no_stub, вот пример:
<?php echo kama_thumb_img('w=150 &h=100 &no_stub'); ?>
Создаем миниатюру-ссылку на оригинал
Если нужно сделать миниатюру, как картинку, по клику на которую откроется большое изображение, то можно использовать такой код:
<?php echo kama_thumb_a_img('w=150 &h=100 &class=alignleft myimg &q=75'); ?>
выведет на экран:
<a href='ссылка на оригинал картинки'><img src='ссылка на миниатюру' alt='' class='alignleft myimg' width='150' height='100' /></a>
Получаем миниатюру по ссылке на картинку
Если нужно создать миниатюру на определенную картинку (не картинку из текста статьи), то можно передать параметр src, в котором указать ссылку на картинку, выглядит так:
<?php echo kama_thumb_img('src=http://домен/картинка.jpg &w=150 &h=100 &class=alignleft'); ?>
Параметр post_id
Чтобы точно определить для какого поста должна создаться миниатюра нужно определить параметр post_id. Этот параметр нужен, если встречаются глюки с переменной $post. Или если функция вызывается внутри другой функции. Если вызов происходит в Цикле WordPress, то этот параметр указывать не нужно!
<?php echo kama_thumb_img("w=150 &h=100 &post_id=идентификатор_поста"); ?>
Очистка кэша или произвольных полей:
Так как страницу настроек для плагина я не делал (возможно в будущем), то кэш картинок (каталог, куда записываются миниатюры) сбрасывается (очищается) со страницы плагинов. В описании плагина две сслыки: сброс кэша и удаление всех произвольных полей со ссылками на картинки.
Также, кэш можно сбросить, добавив в любой URL ?kt_clear_cache, а произвольные поля удалить, добавив ?kt_clear_customs. Например, если вы уже используете мой плагин: kama easy admin, то можно в нем использовать такую ссылку для очистки кэша картинок: http://домен/?kt_clear_cache. Сброс кэша работает, только для залогиненных пользователей, с правами админа.
Вроде все, если что-то забыл, дополню позже.
Если не понятно как использовать функции, в конкретных примерах, спрашивайте в комментариях, помогу! Заодно добавлю сюда парочку примеров.
Обновление
Версия 1.4.0 (11 апреля 2011)
Исправил получение ссылки на картинку, если картинка в тексте является анкором ссылки на оригинал (см. комментарий). Переработал код. Добавил автоматическую очистку каталога с миниатюрами, каждые 3 дня.
Версия 1.3.1 (11 ноября 2010)
Исправлен нюанс с ресайзом, теперь можно указывать размеры сторон у миниатюр больше чем у оригинала (до этого лишнее пространство заполнялось черным цветом).
Версия 1.3 (9 ноября 2010)
Немного изменен принцип создания миниатюр, теперь если исходный файл png, то миниатюра создается тоже png с сохранением прозрачного слоя. Спасибо Роману, который указал на эту ошибку и сподвиг на её исправление.
22 октября 2010
Добавил аргумент post_id. Исправлены некоторые ошибки и недоработки в коде. Изменил вывод на экран, теперь все функции просто возвращают результат, выводить на экран нужно через echo.
28 октября 2010 v1.2.5
Исправил ошибку с очисткой кеша.
- Предыдущие по меткам
- Предыдущие записи
- Плагин для легкого управления сайтом на WordPress (версия 3) ← 30.Июл.2010 // 76
- Произвольное меню в WP 3.0+ (wp_nav_menu) ← 16 Октябрь 2010 // 31
- Плагин для легкого управления сайтом на WordPress (версия 3) ← 30 Июль 2010 // 76
- Обзор WordPress 3.0. Что несет нам прогресс? ← 30 Июль 2010 // 4
Тимур, спасибо за плагин, как раз то, что искала.
Но есть одна проблема: при выводе связанных записей под постом превью создаются, а при выводе комментируемых в сайдбаре, упорно нет.
С чем это может быть связано?
Что-то с шаблоном видимо. Может стоит обратить внимание на параметр post_id у плагина, попробуйте его указать. Может как-то не правильно определяется переменная $post и плагин не может определить с каким именно постом работать.
Спасибо за плагин, как раз ищу альтернативу timthumb.php
А как называется создаваемое произвольное поле?
И второй вопрос, как картинка в контенте ищется, самая первая выбирается или по каким-то другим критериям?
Самая первая картинка выбирается. Название произвольного поля указывается в файле плагина, по дефолту For_Thumb
Доброго времени суток. Строю свой первый сайт (портфолио, верстальщики мы...), очень удачно пришелся Ваш плагин (за что Вам огромное верстальщицкое спасибо). Не имея практически никаких ,кроме базовых, знаний php, смог-таки прикрутить его к шаблону, даже позволил себе (да простите мне мое самоуправство) "избавиться от совести"
Однако одна мааленькая мелочь все-таки мешает моему спокойному сну и хорошему пищеварению - в миниатюре представляется центр изображения-родителя (в моем случае - контент скрина сайта), а хотелось бы его верх (опять же, в моем случае - хедер). Возможно, вопрос дилетантский, но реально ли сделать так, чтобы изображение-родитель обрезалось не сверху и снизу, а только снизу, в миниатюре представляя свой верх (хедер скриншота сайта).
Заранее спасибо. Размеры моей благодарности будут безграничны в пределах разумного)
Такое возможно, но надо в код плагина лезть, вспоминать что там как, тестировать. Извините...
А вот глянул быстро, вроде тут, если память не изменяет:
удалите /2*6/10
Вот спасибо. Разобрался. На самом деле там нужно проставить 0 вместо этих цифр. Если просто их убрать, желаемого эффекта не получается. Весьма признателен)
Вопрос такого плана.
у меня более 1000 постов на сайте. И работает скрипт, который ищет первую картинку в после - и делает из неё миниатюры (как минимум для анонсов) - не очень удобное решение.
Скажите, если я поставлю Ваш плагин - можно ли его использовать таким образом, чтобы он работал по следующей схеме:
если есть миниатюра - выводить её
иначе, искать первую картинку в посте - выводить её.
в этом случае - мне не придётся пробегаться уже по созданному контенту и каждому посту назначать миниатюру...
Вы руками ничего же делать не будите, скрипт сам пробежится создаст миниатюры и произвольные поля с ссылками на них. Если хотите заменить на мой скрипт, то полностью удалите старый, включая его записи в БД, если таковые имеются. Совмещать я бы не советовал.
Ответить прямо на ваш вопрос не могу, потому что надо видеть как работает ваш нынешний скрипт. Да и отвечать вряд ли стал бы - в двух словах не скажешь как такое сделать...
вопрос по теме..не пойму почему не действует данная конструкция:
<?php $image = the_post_thumbnail(); ?> <?php if($image !== '') { echo $image; } else { ?> <img src="http:/.../defpreview.gif" alt="Изображение отсутствует"/> <?php } ?>Если есть миниатюра, выводит верно, если нет вообще нуль.
А вот код, отчасти взятый из плагина, работает:
<?php if ( has_post_thumbnail() ) { the_post_thumbnail(); } else { ?> <img src="http://.../defpreview.gif" alt="Изображение отсутствует"/> <?php } ?>Почему так?