WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

Kama Thumbnail

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

О плагине создания миниатюр для 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. Настройки → Медиафайлы
меню

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

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

// возвращает УРЛ созданной миниатюры
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 пикселей.

  • crop (false/0/no/none/true/строка) (с версии 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' );
    
    // указываем два параметра сразу, порядок значения не имеет: 
    // top/right или right/top...
    kama_thumb_img( 'w=400 &h=200 &crop=top/right' );

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

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

  • 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().

  • stub_url (строка) (с версии 4.8.12)
    URL картинки-заглушки. Перебивает глобальную опцию.

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

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

  • post_id | post (int|WP_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' );

    attach_id имеет больший приоритет чем src. Т.е. в следующем примере ссылка на картинку http://example.com/img.png будет обработана, только если нет вложения 250, иначе будет обработано указанное вложение.

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

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

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

  • rise_small (true/false) (с версии 2.8.3)
    Увеличивать ли изображения, если они меньше указанных размеров. По умолчанию, если создаваемая миниатюра маленькая (меньше указанного размера), она увеличиться до указанных размеров. Если такое поведение нужно отменить, укажите в этом параметре false.

    Эту настройку можно определить глобально в настройках плагина.

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

$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( [
	'width'  => 200,
	'height' => 150,
	'class'  => 'alignleft',
	'src'    => '',
] );
Можно указать только ширину или высоту

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

Параметр src

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

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

Очистка кэша

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

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

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

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

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

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

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

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

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

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

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

<img src="http://example.com/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».

Скорость работы функций (замеры)

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

Замеры проводились на картинке размером 32КБ (650x350), из которой создавалась миниатюра размером 100x100.

  • kama_thumb_src() - 1 раз = 0.01403, 50 000 раз = 0.54830 сек. (очень быстро)
  • kama_thumb_img() - 1 раз = 0.01471, 50 000 раз = 1.38748 сек. (быстро)
  • kama_thumb_a_img() - 1 раз = 0.01471, 50 000 раз = 1.72967 сек. (быстро)

При работе с кэшем, а это 99% работы плагина, нет разницы какой у картинки размер...

меню

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

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

if(
	! function_exists('kama_thumb_src') &&
	'plugins.php' !== $GLOBALS['pagenow'] // для нормальной активации плагина
){

	function kama_thumb_src(){}
	function kama_thumb_img(){}
	function kama_thumb_a_img(){}
	function kama_thumb(){}

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

Примеры

#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' />

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

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

kama_thumb_img('w=200');

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

#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');
меню

Использование не как плагин (интеграция в тему)

Если вы разрабатываете тему и вам нужен функционал этого плагина, но при этом не нужно устанавливать плагин. То этот плагин можно использовать не как плагин, а как часть темы или как mustuse плагин.

Для этого нужно скопировать папку плагина (со всеми файлами) в папку темы и подключить основной файл плагина kama_thumbnail.php в файле functions.php. Это все!

Например, в теме есть папка includes и в нее мы скопировали папку плагина, тогда главный файл нужно подключить так:

require_once 'includes/kama-thumbnail/kama_thumbnail.php';

Отключение страницы опций

Если страница опций не нужна (делаете сайт для клиента). То её можно отключить. Для этого нужно прописать нужные опции через фильтр kama_thumb_def_options. Сделать это можно в файле темы functions.php или где-либо еще:

// Переопределяет настройки плагина Kama Thumbnail
// Автоматически отключают страницу опций в админке и использование опций.
add_filter( 'kama_thumb_def_options', function( $opts ){

	/* исходные, см. код плагина
	'meta_key'          => 'photo_URL', // называние мета поля записи.
	'cache_folder'      => '',          // полный путь до папки миниатюр.
	'cache_folder_url'  => '',          // URL до папки миниатюр.
	'no_photo_url'      => '',          // УРЛ на заглушку.
	'use_in_content'    => 'mini',      // искать ли класс mini у картинок в тексте, чтобы изменить их размер.
	'no_stub'           => false,       // не выводить картинку-заглушку.
	'auto_clear'        => false,       // очищать ли кэш каждые Х дней.
	'auto_clear_days'   => 7,           // каждые сколько дней очищать кэш.
	'rise_small'        => true,        // увеличить создаваемую миниатюру (ширину/высоту), если её размер меньше указанного размера.
	'quality'           => 90,          // качество создаваемых миниатюр.
	'allow_hosts'       => '',          // доступные хосты, кроме родного, через запятую. 'any' - любые хосты.
	'debug'             => 0,           // режим дебаг (для разработчиков).
	*/

	$opts['cache_folder']     = get_template_directory() . '/cache';
	$opts['cache_folder_url'] = get_template_directory_uri() .'/cache';
	$opts['no_stub']          = true;
	$opts['auto_clear']       = true;

	return $opts;
} );

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

меню

FAQ

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

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

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

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

1. Добавить плагин в каталог плагинов WordPress - 21 голос
2. Дать отдельно функцию, а не плагин - 12 голосов
3. Чтобы делал миниатюры на SRC с удаленного ресурса, скачивая их в папку wp-content/cache/thumb - 11 голосов
4. Настройка удаления кэша картинок не 7 дней, а произвольно - 21 голос
5. Возможность обрезать картинку с определенной стороны (к примеру оставлять верх или левую часть) - 13 голосов

На avi1.ru Вы можете накрутить просмотры на видео в Инстаграме с критериями на любой вкус: быстрые, медленные живые и т. д. К тому же, Вы можете уже сейчас получить неплохие оптовые скидки на продвижение в социальной сети.

565 комментов
Полезные 34 Вопросы 6 Все
  • @ shigaev3 shigaev.com

    Огромная работа, радует учёт реальных потребностей.

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

    2
    Ответить10.Фев.2020 09:44 #
    • Kama7725

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

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

      Ответить10.Фев.2020 12:15 #
      • @ shigaev3 shigaev.com

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

        Ответить10.Фев.2020 13:39 #
        • Kama7725

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

          Ответить11.Фев.2020 12:47 #
          • @ shigaev3 shigaev.com

            Это несомненно так — плагин автоматизирует рутинную работу, невозомжную из коробки wp. Но миниатюра есть миниатюра и, наряду с автоматизацией, от неё ждут ещё и давно проверенных полезняшек. Довольно устоявшийся сектор пользователей был бы приятно удивлён логичным дополнением в существующем плагине и уже не стал бы искать его в других.

            Ответить26.Фев.2020 22:11 #
            • Kama7725

              Что конкретно дополнить и как это дополнение должно быть полезным хотябы 20% пользователей на практике?

              Ответить26.Фев.2020 22:35 #
              • @ shigaev3 shigaev.com

                Насчёт двадцати или даже десяти процентов поклонников — это не факт и уж точно не сразу. За неимением аналогов в плагинах, функционал ждёт судьба любых нововведений. Но своих пользователей он несомненно получит — в первую очередь вследствие узнаваемости: механизм знаком наверное всякому, кто создавал себе аватары в соцсетях или на форумах. От имеющегося у вас ресайза, он отличается не автоматическим (если я правильно понимаю), а ручным указанием области картинки, которой суждено стать вариантом миниатюры. При том, оригинал не интерполируется и добавляет возможность указать размер будущей миниатюры рамкой обрезки. Совсем будет шикарно, а равно соответствуя концепции вашего плагина, когда пользователь получит возможность задать размер этих рамок выбором из наборов пресетов размера сторон. Добавление же возможности создавать ещё и круглые/скруглённые миниатюры (типа через всякие border-radius) и вовсе закрыло бы вопрос универсальности плагина.

                Ответить28.Фев.2020 12:19 #
  • @ Виктор

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

    Ответить10.Фев.2020 13:56 #
    • Kama7725

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

      Ответить11.Фев.2020 12:53 #
      • @ Виктор

        У меня на сайте перед размером каждый раз разное значение eb2c9bd5f5c2d0d
        Как сделать, чтобы если изначально картинка называется ssylki.jpg то имя обрезанной миниатюры стало ssylki_520x270.jpg а не 262d6ccc3ca5bfc_520x270.jpg

        Ответить11.Фев.2020 13:14 #
        • Kama7725

          Не может быть разное имя для одной и той же картинки, вы что-то путаете, плагин создает имя файла миниатюры из переданного URL картинки!

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

          Ответить11.Фев.2020 13:56 #
  • @ Bo3gyX38

    Спасибо за плагин, незаменимая штука. Писал на wordpress.org, но продублирую здесь)
    Есть проблема при использовании плагина на доменах вида http://domain.loc:7080/ т.е. с указанием порта
    возникает ошибка на 240 строке в /wp-content/plugins/kama-thumbnail/class.Kama_Make_Thumb.php
    просьба пофиксить.

    Ответить13.Апр.2020 14:42 #
    • @ Bo3gyX38

      удалил, т.к. к делу не относится, это уже мои заморочки dash (переработал)

      Ответить13.Апр.2020 19:52 #
      • Kama7725

        Есть смысл переделать на получение домена через опции, там где $_SERVER['HTTP_HOST']?

        Ответить13.Апр.2020 22:37 #
        • @ Bo3gyX38

          Всмысле из опций сайта? из опций сайта нет смысла. Сайт можеть смотреть на разные хосты. Например, в моем случае сайт был заблокирован в определенной стране и потребовалось зеркало.
          Но нужно проверить результат работы parse_main_dom, т.к. там была ошибка.
          [13-Apr-2020 13:11:03 UTC] PHP Notice: Undefined offset: 0 in /var/www/wp-content/plugins/kama-thumbnail/class.Kama_Make_Thumb.php on line 240

          Ответить13.Апр.2020 22:40 #
          • Kama7725

            Сайт можеть смотреть на разные хосты.

            Ты через константу WP_HOME менял динамически? Тогда get_option('home') будет данные подхватывать и получается есть смысл заменить $_SERVER['HTTP_HOST'] на get_option('home')

            Но нужно проверить результат работы parse_main_dom

            Проверить то можно, только проблему это не решает. В parse_main_dom() какой хост залетал у тебя, что ошибку выдавало?

            Ответить14.Апр.2020 00:47 #
            • @ Bo3gyX38

              Вобщем еще раз, ситуация такая:

              В конфиге:

              define( 'WP_HOME', 'http://' . $_SERVER['HTTP_HOST'] );
              define( 'WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST'] );
              define( 'WP_CONTENT_URL', 'http://' . $_SERVER['HTTP_HOST'] . '/wp-content' );

              В опциях: стоит http://localhost:7080
              Когда захожу с 127.0.0.1:7080 лезет нотис

              На фронте функция выводит заглушку, вместо картинки, что для первого, что для второго хоста.

              т.е менять $_SERVER['HTTP_HOST'] не нужно, нужно добавить еше одну проверку, для хоста такого вида. smile

              Ответить14.Апр.2020 03:24 #
              • Kama7725

                А как поправил в итоге?

                Ответить14.Апр.2020 23:07 #
                • @ Bo3gyX38

                  Да не подправил, в том и дело.
                  Нотис убрал, дописав регулярку, дальше код копать не стал.
                  https://gist.github.com/rwsite/d7834e00cfb9b01d28be8f5d88ba2132

                  Ответить15.Апр.2020 00:21 #
                  • Kama7725

                    Этот код проверь плз, если все ок, зарелизю. Я там кроме доработок еще и баг поправил в регулярке.

                        /**
                    	 * Get main domain name from maybe subdomain:
                    	 * foo.site.com > site.com | sub.site.co.uk > site.co.uk | sub.site.com.ua > site.com.ua
                    	 *
                    	 * @param  string  $host  URL or Host like: site.ru, site1.site.ru, xn--n1ade.xn--p1ai
                    	 *
                    	 * @return string Main domain name
                    	 */
                    	static function parse_main_dom( $host ){
                    
                    		// Передан URL или указан порт (dom.site.ru:8080 > dom.site.ru) (59.120.54.215:8080 > 59.120.54.215)
                    		if( preg_match( '~/|:\d{2}~', $host ) )
                    			$host = parse_url( $host, PHP_URL_HOST );
                    
                    		// для http://localhost/foo или IP
                    		if( ! strpos($host, '.') || filter_var($host, FILTER_VALIDATE_IP) )
                    			return $host;
                    
                    		$host = preg_replace( '/^www\./', '', $host );
                    
                    		// cirilic: .сайт, .онлайн, .дети, .ком, .орг, .рус, .укр, .москва, .испытание, .бг
                    		if( false !== strpos($host, 'xn--') )
                    			preg_match( '/xn--[^.]+\.xn--[^.]+$/', $host, $mm );
                    		// other: foo.academy, regery.com.ua, site.ru, foo.bar.photography, bar.tema.agr.co
                    		else
                    			preg_match( '/[a-z0-9][a-z0-9\-]{1,63}\.(?:[a-z]{2,11}|[a-z]{2,3}\.[a-z]{2,3})$/i', $host, $mm );
                    
                    		return apply_filters( 'kama_thumb_parse_main_dom', $mm[0], $host );
                    	}
                    
                    Ответить15.Апр.2020 16:00 #