Яка хороша альтернатива використанню $ content_width для оптимізації зображення?


14

У $content_widthГЛОБАЛЬНОЇ в WordPress ефекти багато тем і навіть деякі плагіни, обмежуючи розмір зображень і вкладається на посаді, це вимога тим , представлених wordpress.org.

Він встановлюється за допомогою:

$content_width = 584; // Twenty Twelve example

Якщо ви вставите велике зображення (за замовчуванням 1024x1024) до публікації, це призведе до:

src="../wp-content/uploads/2013/02/IMG_1390-1024x682.jpg" width="584" height="328"

Якщо замість цього ви видалите цей глобальний параметр і вставите фактичний розмір зображення, встановлення з add_image_sizeним призводить до:

src="../wp-content/uploads/2013/02/IMG_13901-584x328.jpg" width="584" height="328" 

Видалення глобальних та вставлення великих зображень, що дуже часто , часто призводить до економії понад 2 рази, на сторінках з декількома зображеннями я бачу сотні КБ, збережені на завантаженні сторінки.

Чи використання add_image_sizeта видалення можливості вставляти повнорозмірні зображення не є кращим варіантом?

пс. Я писав про це тут з більш точними даними


1
Це звучить як щось, що відображається у списку розсилки wp-хакерів .
eddiemoya

Відповіді:


7

Майте на увазі, що $content_widthглобальний використовується не тільки для зображень, але і для вбудованих об'єктів, таких як відео. Отже, будь-яке рішення не буде лише випадком відмови від використання / підтримки самого $content_widthсебе.

Зазвичай Тема обмежує зображення області вмісту кількома способами:

  1. Великий розмір зображення: визначення $content_widthчогось відповідного для дизайну теми
  2. Розмір оригінального / повного зображення: Визначення правила CSS для того, #content img { max-width: XXX; height: auto; }щоб забезпечити, що вставлені в повнорозмірні зображення зображення не порушують макет
  3. Розмір зображення мініатюри : виклик, set_post_thumbnail_size()щоб визначити типовий thumbnailрозмір мініатюрного зображення / публікації . (Примітка. Я особисто не рекомендую користуватися цим методом. Визначте власні розміри зображень, характерні для певного місця для зображеного зображення, а потім зателефонуйте на цей спеціальний розмір у конкретному місці шаблону через the_post_thumbnail( $size ).)

Як ви виявили, через те, як WordPress вибирає з проміжним розміром зображення для будь-якого запиту зображення, цей запит може призвести до масштабування зображення в браузері.

Тематично визначені значення для великого зображення

Одним із варіантів було б переосмислити параметри для великих розмірів зображення . (Продовжуйте обережно. Це добре для вашого власного веб-сайту, але публічно розповсюджена Тема, яка заблукає з налаштуваннями налаштувань користувача, - це ... сіра зона в кращому випадку.)

Великі параметри параметри зображення зберігаються у вигляді:

$large_image_width = get_option( 'large_size_w' );
$large_image_height = get_option( 'large_size_h' );

Отже, ви можете встановити ці значення відповідно до свого $content_widthзначення:

global $content_width;
update_option( 'large_size_w', $content_width );
update_option( 'large_size_h', $content_width );

(Зрозуміло, ви хочете, як слід, встановити деякі проблеми з безпекою / перевірки помилок.)

Видаліть опцію для вставки повнорозмірних зображень

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

function wpse86950_filter_image_size_names_choose( $possible_sizes ) {
    unset( $possible_sizes['full'] );
    return $possible_sizes;
}
add_filter( 'image_size_names_choose', 'wpse86950_filter_image_size_names_choose' );

Знову ж таки: ви можете додати сюди кілька розумних помилок, оскільки цей фільтр використовується у більш ніж одному місці.

Визначте нестандартний розмір зображення для зображень на повну ширину

Пов’язаний з попереднім параметром, ви можете визначити 'full-post-width'розмір зображення:

global $content_width;
add_image_size( 'full-post-width', $content_width, $content_width, false );

Потім додайте його до списку доступних опцій:

function wpse86950_filter_image_size_names_choose( $possible_sizes ) {
    // Unset full image size
    unset( $possible_sizes['full'] );
    // Add full-post-width image size
    $possible_sizes['full-post-width'] = 'Full Post Width';
    // Return array
    return $possible_sizes;
}
add_filter( 'image_size_names_choose', 'wpse86950_filter_image_size_names_choose' );

Дякую Чіпу за вичерпну відповідь, я не думав про встановлення get_optionзначень. Решта схожа на суть, яку я використовую gist.github.com/wycks/4949242, яка була пов'язана у моєму посиланні. Також здається, що це сіра область щодо того, як зробити це насправді масштабом, якщо тема буде змінена.
Вік

Також я забув згадати про видалення $content_widthабо не встановлення його, воно все ще застосовується за замовчуванням до вбудованих об'єктів, я думаю.
Вік

Ніколи не бачив цього image_size_names_chooseфільтра! Я замінював ціле поле, щоб зараз отримати мої власні розміри. Це нове в 3,5 чіпі?
sanchothefat

Я думаю, що це було з 3.3, я використовую його для створення add_image_sizeбагатомовної етикетки , і тоді я подумав, що це також було б добре використовувати для цього питання розміру зображення. Якщо вам не потрібна локалізація, ви можете просто перемістити її в масив замість жорсткого кодування.
Вік

@sanchothefat Я не впевнений, коли це було додано. Схоже, Вік каже, що це було 3,3? Я завжди люблю переглядати джерело, коли мені потрібно щось розширити / змінити, і виявити, що до цієї конкретної речі доданий фільтр. :)
Чіп Беннетт

2

Так, я так думаю. Щоб $content_widthвирішити проблему для тем, поданих на репо, я використовую фільтри опцій, щоб форсувати розміри, які я вибрав для дизайну.

add_filter( 'option_large_size_w', function( $opt ) { return 1024; } );
add_filter( 'option_large_size_h', function( $opt ) { return 0; } );
add_filter( 'option_embed_size_w', function( $opt ) { return 1024; } );
add_filter( 'option_embed_size_h', function( $opt ) { return 0; } );
// ...etc...
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.