Враховуючи доступність екранів з високою роздільною здатністю, WordPress тема повинна підтримувати відображення зображень високої якості. Це означає, що має бути функціональність для створення цих зображень, а також спосіб завантаження правильного зображення з урахуванням роздільної здатності екрана кінцевого користувача. У цьому уроці давайте розберемося, чи підтримує ваша WordPress-тема новомодні Retina-екрани.
Є достатньо плагінів, доступних для WordPress користувачів, які додадуть підтримку ретин для сайту.
Після пошуку в плагінах для WordPress ми отримали наступний ТОП-5:
- WP Retina 2x
- Підтримка зображень Retina
- Retina for WP
- Simple WP Retina
- wp-retina
Кожен плагін підходить до додавання підтримки ретини по-своєму, хоча в основному вони використовують ті ж 2 компоненти: скрипт розпізнавання и функцію підготовки зображень. Для розробників, які хочуть додати цю можливість безпосередньо до тем, перше, що потрібно — вставити правильний JS для визначення роздільної здатності екрана.
Визначення екрану
Відображати зображення високої якості має сенс тільки якщо кінцевий користувач використовує ретину дисплей (дисплей з високою щільністю крапок на квадратний дюйм). Для наших цілей найкращий спосіб – з використанням JavaScript. Мені подобається скрипт retina.js від Imulus. Він важить всього 4кб і додає всі функції, які вам потрібні, щоб визначити, чи використовується ретин, і завантажити правильне зображення.
Додавання скрипту
Скопіюйте файл retina.js у папку / js вашої теми. Він має бути там для того, щоб ми могли його викликати.
Додати до файлу functions.php вашої теми наступний код:
add_action( 'wp_enqueue_scripts', 'retina_support_enqueue_scripts' );
/**
* Enqueueing retina.js
*
* This function is attached to the 'wp_enqueue_scripts' action hook.
*/
function retina_support_enqueue_scripts() {
wp_enqueue_script( 'retina_js', get_template_directory_uri() . '/js/retina.js', '', '', true );
}Це дійсно все, що потрібно для визначення. Далі нас цікавить функції створення зображень високої якості.
Створення зображень
Вам потрібно переконатися, що кожного разу при завантаженні зображення створюється версія у високій якості і зберігається з суфіксом @ 2x в імені файлу. Скрипт визначення екрану шукатиме цей суфікс для завантаження зображення під ретин.
Встановлення
Щоб зображення під ретину створювалися автоматично під час завантаження, вам потрібно зачепитися за відповідний WordPress фільтр. В даному випадку правильно використовувати wp_generate_attachment_metadata.
Ось що має з'явитися у файлі functions.php вашої теми:
add_filter( 'wp_generate_attachment_metadata', 'retina_support_attachment_meta', 10, 2 );
/**
* Retina images
*
* This function is attached to the 'wp_generate_attachment_metadata' filter hook.
*/
function retina_support_attachment_meta( $metadata, $attachment_id ) {
foreach ( $metadata as $key => $value ) {
if ( is_array( $value ) ) {
foreach ( $value as $image => $attr ) {
if ( is_array( $attr ) )
retina_support_create_images( get_attached_file( $attachment_id ), $attr['width'], $attr['height'], true );
}
}
}
return $metadata;
}Ця функція перевіряє, чи завантажений файл є зображенням. Якщо так, вона обробляє його за допомогою функції retina_support_create_images().
Створення зображення
Після перевірки, чи є завантажений файл зображенням, вам потрібна функція обробки та створення версії високої якості під ретіну.
Ось що ще потрібно додати до файлу functions.php вашої теми:
/**
* Create retina-ready images
*
* Referenced via retina_support_attachment_meta().
*/
function retina_support_create_images( $file, $width, $height, $crop = false ) {
if ( $width || $height ) {
$resized_file = wp_get_image_editor( $file );
if ( ! is_wp_error( $resized_file ) ) {
$filename = $resized_file->generate_filename( $width . 'x' . $height . '@2x' );
$resized_file->resize( $width * 2, $height * 2, $crop );
$resized_file->save( $filename );
$info = $resized_file->get_size();
return array(
'file' => wp_basename( $filename ),
'width' => $info['width'],
'height' => $info['height'],
);
}
}
return false;
}Тепер нове зображення під ретин буде створено. Плюс до назви файлу буде додано @ 2xщоб скрипт розпізнавання правильно зробив своє завдання з боку клієнтської частини.
Власне це все, що вам потрібно. Хоча добре було б додати ще функцію, щоб почистити все після видалення зображення.
Прибирання
Якщо користувач видаляє зображення з Медіа-бібліотеки, також можна видалити і додаткові копії для ретини.
Вставте цей завершальний блок коду у файл functions.php:
add_filter( 'delete_attachment', 'delete_retina_support_images' );
/**
* Delete retina-ready images
*
* This function is attached to the 'delete_attachment' filter hook.
*/
function delete_retina_support_images( $attachment_id ) {
$meta = wp_get_attachment_metadata( $attachment_id );
$upload_dir = wp_upload_dir();
$path = pathinfo( $meta['file'] );
foreach ( $meta as $key => $value ) {
if ( 'sizes' === $key ) {
foreach ( $value as $sizes => $size ) {
$original_filename = $upload_dir['basedir'] . '/' . $path['dirname'] . '/' . $size['file'];
$retina_filename = substr_replace( $original_filename, '@2x.', strrpos( $original_filename, '.' ), strlen( '.' ) );
if ( file_exists( $retina_filename ) )
unlink( $retina_filename );
}
}
}
}Висновок
Щоб підготувати вашу тему до підтримки ретини-дисплеїв, не потрібно багато зусиль. За допомогою всього кількох функцій та одного JavaScript файлу, ви зможете бути впевнені, що зображення завжди виглядатимуть добре, на будь-якому типі екрану.





















Коментарі до запису: 1
Скажімо дружно - Нахуй треба!