WordPress как на ладони
Наставник Трепачёв Д.П., phphtml.net wordpress jino

Kama Thumbnail

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

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

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

Оглавление:

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

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

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

  1. Не нужно вручную создавать произвольное поле со ссылкой на картинку. Поле создается автоматически.

  2. Работает немного быстрее 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. В нее будут создаваться все миниатюры.

Миниатюры создаются всякий раз, когда вызывается одна из функций плагина для создания миниатюры - их всего 3: kama_thumb_src(), kama_thumb_img(), kama_thumb_a_img(). В функцию можно передать размеры миниатюры и URL картинки из которой нужно сделать миниатюру. URL картинки можно не передавать, тогда функция будет искать картинку для текущей записи.

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

  1. Если у поста установлена миниатюра WordPress, её ссылка будет взята;

  2. Если в тексте поста есть картинка, её ссылка будет взята. Если эта картинка является анкором ссылки на увеличенный вариант этой картинки, то будет взят УРЛ ссылки, а не картинки;

  3. Если у поста нет ни миниатюры WP ни картинки в тексте, то плагин проверит нет ли у поста загруженной для него картинки (вложения). Если вложение есть, то ссылка будет взята от туда;

  4. Если ничего не найдено, то в произвольное поле будет добавлена запись-заглушка: "no_photo". Нужно это, чтобы не производить каждый раз эти операции по поиску ссылки.

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

к началу

Скачать

Скачать: Kama Thumbnail (последняя версия)
Скачано: 193, размер: 19.0 KB, дата: 2 года назад

Смотреть плагин в каталоге WordPress →

Настройки kama thumbnail. Настройки > Медиафайлы

Настройки kama thumbnail. Настройки > Медиафайлы

Использование (параметры)

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

// возвращает УРЛ созданной миниатюры
echo kama_thumb_src( $args, $src );

// возвращает готовую картинку (img тег)
echo kama_thumb_img( $args, $src );

// возвращает ссылку-картинку. Ссылка ведет на оригинал картинки.
echo kama_thumb_a_img( $args, $src );

// получает ширину или высоту картинки. Или любое свойство экземпляра класса,
// который создает картинку. Обычно там могут пригодится только ширина или высота...
// функция нужна, когда создается миниатюра без заранее известной ширины или высоты...
echo kama_thumb( $optname );
// Пример:
echo '<img src="'. kama_thumb_src('w=200') .'" width="200" height="'. kama_thumb('height') .'" alt="" />';
// но в данном случае лучше использовать готовую kama_thumb_img() она все это учитывает...
$args(строка/массив)

Аргументы по которым создавать миниатюру. Все возможные параметры:

  • w | width
    Ширина миниатюры.

  • h | height
    Высота миниатюры

    Если параметры 'w' и 'h' не указаны, то они будут равны 100: получится квадратная картинка 100х100 пикселей.

  • notcrop
    Если указать этот параметр (любое значение), то параметр crop выставиться в false: crop=false. Этот параметр в приоритете перед crop...

  • crop
    Отвечает за кадрирование. По умолчанию кадрирование всегда включено. С версии плагина 2.7.3.

    Чтобы отключить кадрирование, укажите false/0/no/none или определите параметр 'notcrop'. Тогда картинка не будет кадрироваться, а будет создаваться как уменьшенная копия оригинала по указанным размерам одной из сторон: либо высота, либо ширина - выбирается наименьшая подходящая сторона (т.е. одна сторона будет соответствовать h или w, а противоположная будет меньше чем указана в h или w).

    Позиция кадрирования

    Можно указать строку: 'right/bottom' или 'top', 'bottom', 'left', 'right', 'center' и любые их комбинации, через /. Это укажет область кадрирования:

    • 'left', 'right' - для горизонтали
    • 'top', 'bottom' - для вертикали
    • 'center' - для обоих сторон

    Когда указывается одно значение, второе будет по умолчанию. По умолчанию 'center/center'.

    Примеры:

    // картинка скорее всего будет уменьшаться по высоте (большая сторона),
    // а ширина будет срезаться. right означает, что нужно показать 
    // правую часть картинки при срезе, а левую отрезать...
    kama_thumb_img('w=200 &h=400 &crop=right');
    
    // картинка будет показана полностью по ширине (большоая сторона),
    // а высота будет срезаться. top означает, что нужно показать верх картинки, 
    // и нижнюю часть срезать.
    kama_thumb_img('w=400 &h=200 &crop=top');
    
    // указываем два параметра сразу, порядок значения не имеет...
    kama_thumb_img('w=400 &h=200 &crop=top/right');

    Уменьшение картинки по указанной стороне

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

    kama_thumb_img('w=200');

    Теперь ширина всегда будет 200, а высота какая получится... При этом картинка всегда будет полная, без кадрирования.

    По умолчанию: true

  • alt
    alt атрибут картинки.

  • title
    title атрибут картинки.

  • class
    class атрибут <img> тега. По умолчанию: 'aligncenter'.

  • style
    style атрибут IMG тега.

  • attr
    Атрибуты для тега <img>. Строка передается как есть, без очисток.

  • a_class
    class атрибут <a> тега. Для функции kama_thumb_a_img().

  • a_style
    style атрибут <a> тега. Для функции kama_thumb_a_img().

  • a_attr
    Атрибуты для тега <a>. Строка передается как есть, без очисток. Для функции kama_thumb_a_img().

  • no_stub
    Указываем, если не нужно выводить заглушку. Вместо нее будет возвращен пустой результат.

  • yes_stub
    Указываем, если нужно выводить заглушку, когда она отключена в настройках.

  • post_id | post
    Идентификатор или объект поста. Его нужно передавать, когда функция вызывается не из Цикла WordPress, например, внутри какой-нибудь функции. Или, когда переменная $post определяется неправильно. Например, определяется картинка от другой записи или еще какие-нибудь глюки.

    Если передать этот параметр, то скрипт будет точно знать какой пост обрабатывать. Если этот параметр не передан, то будет обрабатываться пост, находящийся в текущий момент (когда вызывается функция) в  переменной $post.

  • attach_id
    ID изображения (вложения) в структуре WordPress. Этот ID можно еще указать числом в параметре $src - во втором параметре функции:

    echo kama_thumb_img('h=200', 250 );
    echo kama_thumb_img('h=200 &attach_id=250');
  • allow
    Разрешенные хосты только для текущего вызова. Эта настройка ставиться глобально в настройках плагина. Но когда нужно указать разрешенный хост не глобально, а только для текущего вызова, его можно указать в этом параметре.

    Если указать 'any', то будет разрешено создавать миниатюры с любых сайтов (хостов). Напомню, что по умолчанию разрешается только с текущего домена и под-доменов. С версии (2.5)

  • q | quality
    Качество сжатия jpg (по умолчанию 85. макс.100).
$src(строка)

Ссылка на картинку, миниатюру которой нужно создать.

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

Можно указать число, тогда плагин будет считать что указано ID вложения - медиафайла WordPress и сам получит URL этого медиафайла и обработает его...
По умолчанию: ''

Если параметр передается как массив, то второй аргумент $src можно передать в этом массиве, под ключом: src, url, link или img:

echo kama_thumb_img( array(
	'src' => 'http://yousite.com/IMAGE_URL.jpg',
	'w' => 150,
	'h' => 100,
) );

Заметки

Параметры можно указывать:
// строкой
kama_thumb_img('w=200 &h=100 &alt=название картинки &class=aligncenter', 'ссылка на произвольную картинку');
// 'ссылка на произвольную картинку' должна указываться как второй аргумент функции. Потому что в ссылке могут быть свои параметры запроса, чтобы не смешались с указанными.

// или массивом (рекомендуется)
kama_thumb_img( array(
	'width'  => 200,
	'height' => 150,
	'class'  => 'alignleft' 
	'src'    => ''
) );
Можно указать только ширину или высоту

Тогда противоположная сторона (высота или ширина) будут подобраны пропорционально уменьшенной копии;

Параметр src

Нужен для случаев, когда нужно создать миниатюру к любой картинке.

Если параметры передаются строкой, то src нужно указывать во втором аргументе функции.

Очистка кэша

В настройках плагина есть 2 кнопки очистки кэша: "весь кэш" и "кэш заглушек". Нужно это для случаев, когда по каким-либо причинам, плагин не смог создать миниатюру по УРЛ. В этом случае для картинки создается заглушка, чтобы не пытаться создать картинку каждый раз при вызове. При очистке кэша заглушек, удаляются только заглушки и для всех заглушек, плагин пытается создать миниатюры еще раз.

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

Картинки с других доменов

По умолчанию можно создавать картинки только с текущего домена или поддоменов.

Чтобы можно было создавать картинки с внешних доменов укажите названия разрешенных доменов в настройках плагина: Настройки - Медиафайлы или в параметре allow при вызове функции.

Если вместо названия домена(ов) указать any, то будет разрешено создание картинок с любых доменов.

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

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

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

<img src="http://site.ru/foo.jpg" alt="alt_text" width="1000" height="800" class="aligncenter" />

Но такая большая не нужна, а нужно её уменьшить не визуально, а реально. Для этого добавляем к ней класс mini и указываем нужные размеры (width="300"):

<img src="http://site.ru/foo.jpg" alt="alt_text" width="300" class="aligncenter mini" />

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

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

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

Проверка обязательной установки плагина

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

Для этого поместите такой код в файл темы functions.php.

// обязательный для темы плагин kama thumbnail
if( ! is_admin() && ! function_exists('kama_thumb_img') ){
	 wp_die('Активируйте обязательный для темы плагин Kama Thumbnail');
}

Теперь в случае деактивации плагина, во фронтэнде пользователь увидит сообщение: «Активируйте обязательный для темы плагин Kama Thumbnail».

к началу

Сообщения о необходимости установить этот плагин

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

if( ! function_exists('kama_thumb_src') ){
	add_action( 'admin_notices', function(){
		echo '<div class="error"><p>'. __( 'This theme requires plugin Kama Thumbnail. Install it please.', 'dom' ) .'</p></div>';
	} );

	function kama_thumb_src(){}

	function kama_thumb_img(){}

	function kama_thumb_a_img(){}

	function kama_thumb(){}
}
к началу

Примеры

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

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

<?php echo kama_thumb_img('w=150 &h=100 &class=alignleft myimg'); ?>

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

<img src='ссылка на миниатюру' alt='' class='alignleft myimg' width='150' height='100' />

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

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

<?php echo kama_thumb_img('w=150 &h=100 &no_stub'); ?>

#3 Проверка наличия картинки для записи

Если нужно проверить есть ли у поста картинка и если нет, то сделать что-то другое, то используйте такой код:

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

#4 Получаем только УРЛ миниатюры

Если не нужно выводить готовый тег img, а нужно получить только ссылку на миниатюру, чтобы затем её использовать, используйте функцию kama_thumb_src():

<?php echo kama_thumb_src('w=100 &h=80'); ?>

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

<img src='<?php echo kama_thumb_src('w=100 &h=80 &q=75'); ?>' alt='' />

#5 Получаем миниатюру-ссылку на оригинал

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

<?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>

#6 Получаем миниатюру по ссылке на картинку

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

$src = 'http://домен/картинка.jpg';
echo kama_thumb_img('w=150 &h=100 &class=alignleft', $src );

#7 Параметр post_id

По умолчанию миниатюры создаются для текущего поста, тот который записан в глобальной переменной $post. Иногда эта переменная определена неправильно и картинки могут создаваться другие, относящиеся к другому посту. Чтобы точно определить для какого поста должна создаться миниатюра определите post_id.  Если вызов происходит в Цикле WordPress, то этот параметр указывать не нужно!

<?php echo kama_thumb_img("w=150 &h=100 &post_id=идентификатор_поста"); ?>

#8 Картинки с других доменов: параметр allow

Если в настройках плагина, в разрешенных хостах, не установлен нужный хост и не установлена строка any (разрешить все домены). То разрешенные домены можно указать в параметре allow:

Допустим наш домен это site.ru, а нам нужно создать картинку с сайта 'http://static.othersite.ru/img.jpg'.

// можно указать точно
echo kama_thumb_img('w=200 &h=150 &allow=othersite.ru', 'http://static.othersite.ru/img.jpg');

// или можно указать для всех, чтобы можно было создавать с любого сайта
echo kama_thumb_img('w=200 &h=150 &allow=any', 'http://other-site.ru/img.jpg');

// точно можно указывать несколько доменов через запятую
echo kama_thumb_img('w=200 &h=150 &allow=othersite.ru, foo.com', 'http://foo.com/img.jpg');
к началу

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

Этот плагин можно легко использовать не как плагин, а как простой php файл.

Если вы разрабатываете тему и вам нужен весь функционал этого плагина, но при этом не нужно устанавливать сам плагин, а нужно внедрить миниатюры в тему, то эта короткая инструкция для вас:

  1. Создайте в каталоге темы любую папку, пусть будет 'thumbmaker'  - это для удобства.

  2. Скачайте плагин и скопируйте в созданную папку файлы: class.Kama_Make_Thumb.php и файл no_photo.png.

  3. Подключите файл class.Kama_Make_Thumb.php в начало functions.php:

    require 'thumbmaker/class.Kama_Make_Thumb.php';
  4. Все! Используйте функции: kama_thumb_*() в шаблоне.

  5. При необходимости, откройте файл class.Kama_Make_Thumb.php и отредактируйте настройки (в самом начале файла): УРЛ кэша, УРЛ заглушки, название произ. поля.

Условие использования - упоминание об этом плагине или этой странице в описании темы.

к началу

Опрос по плагину

Что добавить/убрать в Kama Thumbnail?

  • Добавить ответ

То что было реализовано из результатов опроса:

1. Добавить плагин в каталог плагинов WordPress - 21 голос
2. Дать отдельно функцию, а не плагин - 12 голосов
3. Готово! Чтобы делал миниатюры на SRC с удаленного ресурса, скачивая их в папку wp-content/cache/thumb - 11 голосов

Обновления

1.6.5 и выше
Смотрите в каталоге WP: https://wordpress.org/plugins/kama-thumbnail/changelog/

1.6.5

  • Английская локализация

1.6.4

  • настройки cache_folder и no_photo_url определяются автоматически, если они не указаны жестко. Теперь плагин будет работать как прежде при переезде, не надо обновлять настройки.+ параметр notcrop и все что с ним связано

Версия 1.6.1 (28 апрель 2014)

  • Нельзя было указать атрибут title, была ошибка в коде.
  • Если физически файла не существовало (такое иногда бывает), то плагин выдавал php ошибку. Сделал так, чтобы выводилась заглушка "no photo".

Версия 1.6.0 (6 марта 2014)

  • Добавил поддержку библиотеки Imagick. Если она установлена на сервере, то миниатюры будут создаваться с помощью нее. Качество и размер миниатюр с этой библиотекой гораздо выше.

  • Теперь расширение у миниатюр такое же как и у оригинала (до этого у всех миниатюр было .png).

Версия 1.5.9.7 (3 марта 2014)

Исправил баг с поиском картинки в тексте. Ссылка на картинку в тексте берется так: если картинка в тексте - это анкор ссылки, то проверятся УРЛ ссылки, если он ведет на увеличенную копию картинки, то берется этот УРЛ, но если это ссылка на веб ресурс, то берется УРЛ картинки-анкора. Мелкие поправки кода.

Версия 1.5.9.2 (20 февраля 2014)

  1. Удалил поддержку NextGen Gallery;

  2. Сделал страницу настроек плагина на странице Медиафайлов WordPress;

  3. Убрал папку кэша из папки плагина, вытащил её наружу в каталок wp-content/cache/thumb;

  4. Доработал парсинг УРЛ если в посте картинка является анкором ссылки на внешний ресурс, то плагин получал ссылку этого ресурса и ставил заглушку...

  5. Изменил, упростил, улучшил код плагина.

Версия 158 (3 октября 2013)

Проверка своего домена стала независимой от регистра, т.е. Site.ru раньше не равнялся site.ru. На ошибку указал комментатор CanaBeasT.

Версия 157 (31 июля 2013)

  • добавил параметры width и height. Иногда удобнее и понятнее использовать их вместо w и h. Также добавил параметр title;

  • добавил HTML атрибуты width/height в img тег при вызове функции kama_thumb_img();

  • добавил новый шоткод для использования плагина в контенте. Теперь, чтобы в контенте изменить размер картинки под нужный нам, добавьте картинке css класс mini (class="mini")  и в атрибутах width и/или height укажите нужные ширину и/или высоту. Старый шоткод [thumb=...] убрал, если вы его повсеместно использовали и не можете переделывать под новую версию плагина измените настройку USETHUMBSHORTCODE на true.

Версия 1.5.4 (19 декабря 2012)
Теперь произвольное поле удаляется при обновлении записи, чтобы оно было заново создано. При удалении плагина, он удаляет за собой все следы прибывания. Немного изменил код: добавил константы, вместо переменных и всякое, по мелочи.

Версия 1.5.3 (13 ноября 2012)
Добавил предварительную проверку миниатюры WP, если она указана для поста, то миниатюра будет создаваться из нее, а не будет выискиваться из контента.

Версия 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
Исправил ошибку с очисткой кэша.

Kama Thumbnail 566 комментариев
Полезные 22 Вопросы 4 Все
  • Миша cайт: dolinacoda.ru

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

    Ответить1.5 года назад #
    • Kama4477

      Перед выводом миниатюры используйте проверку: получите рубрики записи с помощью http://wp-kama.ru/function/wp_get_post_categories и в зависимости от рубрики получайте URL нужной картинки и создавайте разные миниатюры:

      $src = 'http://домен/картинка.jpg';
      echo kama_thumb_img('w=150 &h=100 &class=alignleft', $src );
      1
      Ответить1.5 года назад #
  • Роман cайт: rdesign-studio.ru

    Спасибо за труд, плагин шикарный.
    Совершенно случайно наткнулся на него.

    Ответить1.5 года назад #
  • Роман2 cайт: forweb52.ru

    Использую скрипт не как плагин. Делаю по инструкции:

    Создайте в каталоге темы любую папку, пусть будет 'thumbmaker' - это для удобства.
    Скачайте плагин и скопируйте в созданную папку файлы: class.Kama_Make_Thumb.php и файл no_photo.png.
    Подключите файл class.Kama_Make_Thumb.php в начало functions.php:
    require 'thumbmaker/class.Kama_Make_Thumb.php';
    Все! Используйте функции: kama_thumb_*() в шаблоне.
    При необходимости, откройте файл class.Kama_Make_Thumb.php и отредактируйте настройки (в самом начале файла): УРЛ кэша, УРЛ заглушки, название произ. поля.

    Почему то возникает ошибка error: no http in IMG url и ничего не работает

    Ответить1.5 года назад #
    • Kama4477

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

      Ответить1.5 года назад #
      • Роман2 cайт: forweb52.ru

        Приветствую! Ну например пробовал так выводить

        <?php echo kama_thumb_img('w=150 &h=100 &class=alignleft myimg'); ?>

        или так

        <img src='<?php echo kama_thumb_src('w=100 &h=80 &q=75'); ?>' alt='' />

        Появляется такая ошибка

        Ответить1.5 года назад #
        • Kama4477

          Странно, а в произвольном поле какой URL сохраняется при этом? Т.е. зайдите в редактирование записи для которой вызывается

          <?php echo kama_thumb_img('w=150 &h=100 &class=alignleft myimg'); ?>

          Там в метаполях в photo_url что?

          Ответить1.5 года назад #
          • Роман2 cайт: forweb52.ru

            Кажется понял, в чем дело. Раньше стоял уже ваш скрипт, версия была 157, поэтому произвольное поле photo_ur со значением пути до картинки было уже создано. Поставил новую версию скрипта, ничего не работало. Сейчас удалил старые произвольные поля photo_ur - и все, проблема решилась. Хотя не понятно, почему не работало, ведь имена полей одинаковы.
            Спасибо большое вам за помощь и такой удобный скрипт smile thank_you

            Ответить1.5 года назад #
            • Роман2 cайт: forweb52.ru

              Добавлю, что косяк был мой smile Проблема именно в неправильных url, то есть значениях произвольного поля photo_URL. Почему то там был url другого сайта. Видимо когда переносил базу, то значения остались.
              Или еще что то. (эти сайты для разработки на локалке у меня стоят)
              Хотя старый скрипт почему то не ругался.

              Ответить1.5 года назад #
  • Евгений

    Здравствуйте!

    Подскажите, пожалуйста, есть ли возможность выводить определенную картинку из поста (не первую), например, заданием для нее определенного класса? Извиняюсь если данный вопрос уже поднимался.

    Ответить1.4 года назад #
    • Kama4477

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

      Ответить1.4 года назад #
  • Роман2 cайт: forweb52.ru

    Доброго времени суток!
    При использовании как не плагин, каждый раз при замене миниатюры у записи (то есть миниатюра уже установлена, а я ставлю другую) нужно в ручную удалять поле photo_URL, иначе миниатюра не обновляется, выводится старая, или я что то не понял?

    Ответить1.4 года назад #
    • Kama4477

      Да так!

      1
      Ответить1.4 года назад #
      • Роман2 cайт: forweb52.ru

        Но в старом скрипте ведь была реализована автоматическая замена значения поля, или я что то попутал? Version: 157 - был такой скрипт раньше

        Ответить1.4 года назад #
        • Kama4477

          Такого не было ... Ставь плагин или выдерни эту функцию из класса плагина и допиши в классе...

          1
          Ответить1.4 года назад #
  • garri836 cайт: clubwp.ru

    А можно миниатюры приделать к галереи?
    Есть такой код:

     if((get_post_format() == 'gallery') && osetin_get_field('gallery_images', false, false, true) && !isset($only_image)){
    		$gallery_images = osetin_get_field('gallery_images', false, false, true);
    		$thumb_name = osetin_get_archive_thumb_name($current_step_class);
    		if(isset($gallery_images[0])){ ?>
    		  <a href="<?php the_permalink(); ?>" class="archive-item-media-thumbnail fader-activator" style="background-image:url(<?php echo $gallery_images[0]['sizes'][$thumb_name]; ?>); background-size: cover;">
    			<span class="image-fader"><span class="hover-icon-w"><i class="os-icon os-icon-plus"></i></span></span>
    		  </a><?php
    		}
    		foreach( $gallery_images as $key => $image ){
    		  $active_class = ($key == 0) ? 'active' : '';
    		  echo '<div class="gallery-image-source '.$active_class.'" data-gallery-image-url="'.$image['sizes'][$thumb_name].'"></div>';
    		}
    		echo '<div class="gallery-image-previous"><i class="os-icon os-icon-angle-left"></i></div>';
    		echo '<div class="gallery-image-next"><i class="os-icon os-icon-angle-right"></i></div>';

    Картинки выводятся как фон ссылки style="background-image:url(<?php echo $gallery_images[0]['sizes'][$thumb_name]; ?>); background-size: cover;". Для одиночной картинки я поставил <?php echo kama_thumb_src('w=354&h=200'); ?>, а вот как с галереей справиться не хватает познаний в php.

    Ответить1.3 года назад #
    • Kama4477

      Во втором параметре предайте ссылку на картинку, которую нужно уменьшить.

      kama_thumb_src('w=354&h=200', 'ссылка');
      Ответить1.3 года назад #
      • garri836 cайт: clubwp.ru

        Большое спасибо! Сначала вообще не понял, что куда и зачем. Но потыкался и получился вот такой рабочий код:

            if((get_post_format() == 'gallery') && osetin_get_field('gallery_images', false, false, true) && !isset($only_image)){
        		$gallery_images = osetin_get_field('gallery_images', false, false, true);
        		$thumb_name = osetin_get_archive_thumb_name($current_step_class);
        		if(isset($gallery_images[0])){ ?>
        		  <a href="<?php the_permalink(); ?>" class="archive-item-media-thumbnail fader-activator" style="background-image:url(<?php echo kama_thumb_src('w=550&h=310', $gallery_images[0]['sizes'][$thumb_name]); ?>); background-size: cover;">
        			<span class="image-fader"><span class="hover-icon-w"><i class="os-icon os-icon-plus"></i></span></span>
        		  </a><?php
        		}
        		foreach( $gallery_images as $key => $image ){
        		  $active_class = ($key == 0) ? 'active' : '';
        		  echo '<div class="gallery-image-source '.$active_class.'" data-gallery-image-url="'.kama_thumb_src('w=550&h=310', $image['sizes'][$thumb_name]).'"></div>';
        		}
        		echo '<div class="gallery-image-previous"><i class="os-icon os-icon-angle-left"></i></div>';
        		echo '<div class="gallery-image-next"><i class="os-icon os-icon-angle-right"></i></div>';

        Надеюсь, что сделал правильно!?

        Ответить1.3 года назад #
  • Семен

    Проверка основного домена ломает плагин для кириллических доменов.
    170 строка в class.Kama_Make_Thumb.php

    Ответить1.2 года назад #
    • Kama4477

      Вот этот архив скачайте:

      https://downloads.wordpress.org/plugin/kama-thumbnail.zip должна быть версия 2.5.1 я там этот момент поправил Проверьте плз, если все ок, зарелизю...

      Вот так стал выглядеть метод parse_main_dom()

          /**
      	 * Get main domain name from maybe subdomain: foo.site.com > site.com
      	 * @param  string $host host like: site.ru, site1.site.ru, xn--n1ade.xn--p1ai
      	 * @return string Main domain name
      	 */
      	static function parse_main_dom( $host ){
      		// for cirilic domains: .сайт, .онлайн, .дети, .ком, .орг, .рус, .укр, .москва, .испытание, .бг
      		if( false !== strpos($host, 'xn--') )
      			preg_match('~xn--[^.]+\.xn--[^.]+$~', $host, $mm );
      		else
      			preg_match('~[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6}$~', $host, $mm );
      
      		return $mm[0];
      	}
      Ответить1.2 года назад #
  • garri836 cайт: clubwp.ru

    А как можно получить ссылку на оригинал картинки в текстовом виде?

    Ответить1.1 года назад #
  • Александр

    Не знаю почему, но плагин не видит первой картинки в тексте, ни ссылки на ее увеличенное изображение и процентов 10 статей оказываются с no_photo, в то время как распространенный в инете костыль под именем catch_that_image выдергивает первую картинку запросто. Перед первой картинкой стоит навигация по статье (без иконок) а картинки обернуты wordpress-овским div-ом с классом attachment.

    Ответить1.1 года назад #
    • Kama4477

      Можно html код глянуть, откуда не видит? Я что-то не сталкивался с такой проблемой...

      Ответить1.1 года назад #
      • Александр

        Ссылку не могу дать, сайт не мой, я над ним колдую, искал замену timthumb, код следующий:

        вначале навигация по статье с внутренними ссылками

        <div id="attachment_4517" style="width: 360px" class="wp-caption alignnone">
        <a href="path_url/uploads/2014/12/E`ksya.jpg" class="cboxElement">
        <img class="size-medium wp-image-4517" src="path_url/uploads/2014/12/E`ksya-350x311.jpg" alt="img" width="350" height="311">
        </a>
        <p class="wp-caption-text">Text</p>
        </div>
        Ответить1.1 года назад #
        • Александр

          Подключал не как плагин, вызывал следующим образом
          kama_thumb_img('w=200 &h=100')
          и еще так

          $arg=catch_that_image();
          kama_thumb_img('w=200 &h=100',$arg)
          Ответить1.1 года назад #
          • Kama4477

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

            Попробовал щас добавить такой код в контент

            <div id="attachment_4517" class="wp-caption alignnone" style="width: 360px;"><a class="cboxElement" href="http://wptest.ru/wp-content/uploads/2016/05/jpg">
            <img class="alignnone size-medium wp-image-19" src="http://wptest.ru/wp-content/uploads/2016/05/jpg-300x188." alt="" width="300" height="188" />
            </a>
            <p class="wp-caption-text">Text</p>
            
            </div>

            Плаг нашел картинку...

            Ответить1.1 года назад #
            • Александр

              Да там и скидывать то нечего, перед этим блоком с картинкой идут параграфы с контентом и ссылки, более ничего. Как вариант возможно это из-за апострофа в урле - т.к. выдает no_photo примерно в 10% от общего кол-ва статей, но уверенности нет. На днях постараюсь глянуть, что там прописано у тебя в плагине.

              Ответить1.1 года назад #
              • Kama4477

                Тестанул ` в названии файла - работает... Можно посмотреть код catch_that_image() который у тебя используется, в сети чет немного разные варианты...

                function catch_that_image() {
                	global $post, $posts;
                	$first_img = '';
                	ob_start();
                	ob_end_clean();
                	$output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);
                	$first_img = $matches [1] [0];
                
                	if(empty($first_img)){ //Defines a default image
                		$first_img = "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-snc7/c10.10.160.160/426761_10152535709470714_824994792_a.jpg";
                	}
                	return $first_img;
                }

                Это он?

                Ответить1.1 года назад #
                • Александр

                  Да он, но от чего то не обрабатывается src вытянутый регуляркой. Да и еще пара скриптов не справляются с парсингом и ресайзом - такие тяжеловесы (для CPU) как BFIThumb и vt_resize, только timthumb делал все как надо - да только он теперь во многих вирусных базах находиться, да и сервер грузит, с посещалкой более 10к хостеры потом обливаются при присутствии оного

                  Ответить1.1 года назад #
                  • Kama4477

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

                    П.С. catch_that_image() - так себе код... зачем он все картинки ищет-то, одну ж надо? А это там вообще лишнее - ob_start();ob_end_clean();, и в регулярке в конце .*> можно удалить - ненужная операция...

                    Ответить1.1 года назад #
                    • Александр

                      Да, все картинки на том же домене, к копирайтерам строгие требование, img должны быть или уникальные или со свободной лицензией из сервисов как unsplash, picjumbo и т.д., внешние ссылки не допустимы, кроме js аля адсенс или рся.
                      В общем я попробую пока что с классом WP Image Editor поработать, жаль мануалов по нему нет, разве что в буржнете парочка другая. Но вроде он стоит того чтобы им пользоваться - width, height, crop, compresion, добавление суффикса на конец файла (200х150) - уже интересно

                      Ответить1.1 года назад #
  • Тимур, привет. У меня вопрос, косвенно касающийся темы.
    Допустим, у нас есть старый дизайн с шириной статьи 1000px. Соответственно, в статьях где-то встречаются изображения шириной до 1000px (допустим, название этого типа картинок large).
    Далее происходит редизайн, в результате которого ширина статей уменьшается до 800px.
    Мы меняем в коде ширину для large с 1000px на 800px.
    Вопрос: как безболезненно перегнать изображения шириной 1000px в 800px, чтобы в статьях ничего не сломалось?

    Regenerate force thumbnail просто пережмёт их, но в статьях src не сменятся, соответственно, изображения выпадут в 404! Как можно их и в статьях обновить автоматом под новый адрес изображений?
    Из вариантов пока вижу воспользоваться kama-thumbnail, убрать все размеры, кроме оригинального и прописать width="800px" и дописать в классы mini. Вариант тоже не ахти какой удобный, но всё же. Гораздо удобнее было бы, если бы можно было где-то в настройках плагина выставлять ширину изображений по умолчанию, если не указан width. А вместо mini использовать из стандартных классов навроде "size-large". Жаль, что в class.Kama_Make_Thumb.php нет функционала с mini, придётся ковырять плагин, видимо...
    Существуют ли вообще инструменты для миграции изображений внутри статей из дизайна в дизайн со сменой им ширины? Перебирать все статьи вручную совсем не улыбается

    1
    Ответитьгод назад #
    • Kama4477

      Вопрос: как безболезненно перегнать изображения шириной 1000px в 800px,

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

      Все остальное требует кучу возни. Но если возня не страшна и вы перфекционст. То нужно пересоздать все размеры с помощью forse regenerate thumbnail. Далее, регулярками, заменить в текстах все размеры -1000-xxx.jpg/png/gif на соответствующий -800-xxx.jpg/png/gif - это самый сложный момент, я как-то делал нечто подобное, в результате все получилось, но там надо уметь программировать, без опыта я бы не рекомендовал...

      Далее, если сайт уже в индексе, то и фотки тоже там и роботы будут приходить на уже битые фотки, поэтому их нужно редиректить со статусом 301 на новый размер. Тут опять же через любой хук пусть init проверяем REQUEST_URI на совпадение картинке -1000-xxx.jpg/png/gif, налету проверяем наличие файла в uploads (в URL относительный путь есть) и, если файла нет, то редиректим на -800-xxx.jpg/png/gif. Код почти такой же как при замене будет. Но его нужно будет оставить на сайте на пол года, пока новые адреса полностью не заменят старые.

      Короче, как я и сказал, на рабочем сайте, в разы проще изменить css стили под новые размеры и не трогать оригиналы картинок...

      П.С. Для выявления битых ссылок установите на время плагин 404 Error Monitor

      1
      Ответитьгод назад #
      • Otshelnik-Fm179 cайт: across-ocean.otshelnik-fm.ru

        А почему бы не так: Старые фотки перегоняем в размерах, но оставляем старые имена. А вновь загружаемым новые имена (соответствующие размерам)
        У меня был подобный опыт - дамп картинок качал на пк. В тотал командере выбирал все мне нужного размера (я пережимал не с оригинала как вы поняли), далее в пакетном менеджере (я использовал Photo Filter Studio X) задаю новые размеры. Копирую с заменой на сервак

        1
        Ответитьгод назад #
      • Я бы с учетом всех сложностей предложил, просто в CSS для новой ширины установить размер картинки 800 при этом с самой картинкой ничего не делал, т.е. оставь как есть.

        Тогда проще удалить все размеры, оставить оригиналы и их подгонять в css. Но тут Google Pagespeed заругает, да и пользователям давать фулсайз оригиналы вместо превью это плохо, и с точки зрения юзабилити, и с точки зрения seo

        Но если возня не страшна и вы перфекционст. То нужно пересоздать все размеры с помощью forse regenerate thumbnail. Далее, регулярками, заменить в текстах все размеры -1000-xxx.jpg/png/gif на соответствующий -800-xxx.jpg/png/gif

        Вариант, да, спасибо за подсказку. Программировать умею

        Ответитьгод назад #

Здравствуйте, !

Ваш комментарий