Uwaga! Wszystkie informacje i solucje zawarte w postach typu DYI mogą z czasem przestać być aktualne. Niektóre publikowane kody źródłowe, będąc zależnymi od używanych konfiguracji platform i sprzętu, mogą nie działać, lub działać nieprawidłowo u niektórych użytkowników. Stosując opisane rozwiązania przyjmujesz do wiadomości i zgadzasz się, że nie ponoszę odpowiedzialności za ich finalne efekty.
WebP jest nowoczesnym formatem kompresji obrazów opracowanym przez Google. Został zaprezentowany po raz pierwszy w 2010 roku, zapewniając lepszą kompresję obrazów w porównaniu do tradycyjnych formatów, takich jak JPEG, PNG, czy GIF, przy zachowaniu wysokiej jakości obrazu. Zapisywanie w tym formacie nie jest dostępne natywnie w WordPress, ale jest na to sposób. Prosty, ale wymagający zainstalowania lub włączenia rozszerzenia GD na serwerze.
Rozszerzenie GD (Graphics Draw) to jedna z popularnych bibliotek graficznych używanych w PHP do manipulacji obrazami. Jest to potężne narzędzie, które umożliwia tworzenie, edytowanie i manipulowanie obrazami w różnych formatach. Jest ono zazwyczaj włączone domyślnie, ale jeśli wtyczka nie będzie działać, należy się upewnić, że problemem nie jest brak lub wyłączone GD.
Kod:
<?php
/*
Plugin Name: Automatic convert to WebP
Plugin URI: https://dariusz.staropietka.com
Description: Wtyczka konwertuje automatycznie dodawane obrazy do formatu WebP.
Version: 1.0
*/
// Dodajemy hook do funkcji, która będzie wywoływana po dodaniu nowego pliku do biblioteki mediów
add_filter('wp_handle_upload', 'convert_to_webp');
function convert_to_webp($upload) {
$file_path = $upload['file'];
// Sprawdzamy czy plik jest obrazem
$file_type = wp_check_filetype($file_path);
if (substr($file_type['type'], 0, 5) == 'image') {
// Pobieramy rozszerzenie pliku
$file_extension = pathinfo($file_path, PATHINFO_EXTENSION);
// Sprawdzamy czy rozszerzenie jest wspierane
if ($file_extension != 'webp') {
// Konwertujemy obraz na format WebP
$webp_file_path = str_replace('.' . $file_extension, '.webp', $file_path);
$image = imagecreatefromstring(file_get_contents($file_path));
if ($image && imagewebp($image, $webp_file_path)) {
// Aktualizujemy dane załącznika w bazie danych
$upload['file'] = str_replace('.' . $file_extension, '.webp', $upload['file']);
$upload['url'] = str_replace('.' . $file_extension, '.webp', $upload['url']);
}
}
}
return $upload;
}
?>