Встановіть власну назву для згенерованих мініатюр


9

Чи є якийсь фільтр, щоб встановити режим іменування цих автоматично створених ескізів?

Щось на зразок цього:

  • thumbnail_150x150.jpg -> мініатюра-s.jpg
  • thumbnail_300x300.jpg -> мініатюра-m.jpg
  • thumbnail_600x600.jpg -> мініатюра-l.jpg

Відповіді:


4

Здається, що відповідь - ні ...

Я дотримувався основних функцій і виявив тупик. І знайшов цю публікацію ( як я можу зробити обріз add_image_size () зверху? ), Де говорить Рарст :

Проміжне генерування зображення надзвичайно жорстке. Image_resize () тримає його близько до коду та повністю не має гачків.

Але , слідкуючи за іншою відповіддю (від bradt ) та кодом, який він опублікував ( Image Crop Position в WordPress ), я думаю, що це я отримав :)

У функції bt_generate_attachment_metadataя щойно змінив виклик на bt_image_make_intermediate_sizeвключення останнього параметра$size

$resized = bt_image_make_intermediate_size( $file, $size_data['width'], $size_data['height'], $size_data['crop'], $size );

І змінив початок функції bt_image_make_intermediate_sizeтаким чином:

  • додав $sizeпараметр до функції
  • замість значення за замовчуванням nullдо $suffix, a switchдо наших нових суфіксів
function bt_image_make_intermediate_size( $file, $width, $height, $crop = false, $size ) {
    if ( $width || $height ) {
        switch($size) {
            case 'thumbnail':
                $suffix = 't';
                break;
            case 'medium':
                $suffix = 'm';
                break;
            case 'large':
                $suffix = 'l';
                break;
            default:
                $suffix = null;
                break;
        }
        $resized_file = bt_image_resize( $file, $width, $height, $crop, $suffix, null, 90 );

Ось копія повного коду з моїми модами, лише для довідки.
І відмінність від оригіналу .

Напевно, весь код можна стиснути до голої кістки, але таким чином ми отримуємо перевагу від нарізаних на замовлення зображень :))


1
вибачте, все ще подорожую. Я тестую це незабаром і повідомлю вам. Дякую.
Шон Лі

Чи справді ця відповідь справедлива? Минуло кілька років, тому ...
Athoxx

2

Ви можете використовувати фільтр image_make_intermediate_size , але вам доведеться розібратися, на яке ім'я ви хочете змінити проміжний файл, відповідно до отриманого вами імені $ (а потім перейменувати файл, тому що в цей момент він вже створений).

Я генерую лише зображення проміжного розміру для "мініатюри", тому це так просто, як це:

add_filter( 'image_make_intermediate_size', function( $filename ) {

    // old 2017_234783843-100x100.jpg
    $old = $filename;
    // new 2017_234783843-thumbnail.jpg
    $new = preg_replace("/(\d+_\d+)-\d+x\d+\.(.*)/i", "$1-thumbnail.$2", $old );

    rename($old, $new);

    return $new;
} );

1
Регекс міг бути менш конкретним"/(.*)-\d+x\d+\.(.*)/i"
benoît
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.