Her çözünürlükte farklı görsel sunma

WordPress responsive thumbnail problemi – Her çözünürlükte farklı görsel sunma

13 Mart 2021

Kod

Orta Seviye

08:30 dakika

WordPress’te ne zaman bir yazıya öne çıkarılmış görsel atasanız veya yazı içine görsel ekleseniz WordPress otomatik olarak bu görselin çeşitli varyasyonlarını kaydeder. Tarayıcı çözünürlüğüne göre de en uygun görseli bulup ziyaretçiye gösterir. Responsive tasarım teknolojisi bir görseli siteye yükleyip gerisini WordPress’e bırakmak kadar kolay görünse de görsel boyutlarıyla ilgili bazı sorunları da beraberinde getiriyor.

Problem

Tarayıcılar en uygun görseli seçip size sunmadan önce görselin görüntüleneceği alanın ne kadar büyük olduğunu belirlemek isterler. Bu alanın büyüklüğüyse sizin kullandığınız temaya göre değişiklik gösterir. Bunun sonucunda kullandığınız temada görsel alanlarının boyutları tam olarak belirtilmemişse WordPress işini garantiye almak ister ve kullanılabilecek en büyük görsel boyutunu o alanda kullanılabilmesi için ayırır.

Mesela siz bir yazınız için 1500px genişliğinde bir görsel yüklediyseniz; WordPress anasayfada, yazı içinde ve arşiv sayfalarında o görsel için ayrılmış alanda maksimum 1500px genişliğinde bir görsel görüntüleneceğini varsayar ve ona göre davranır. Bu kısmen doğru olsa da ekran genişliği küçüldükçe sunulan görselin de ona göre kırpılıp küçültülmesi zorluk çıkarır ki zaten WordPress  görselleri önceden kırpılmış boyutlara göre sunar.

İlgili alandan daha büyük bir görsel kullanmak WordPress sitenizi yavaşlatır

İlgili alandan daha büyük bir görsel kullanmak WordPress sitenizi yavaşlatır

Biraz sonra öğreneceğiniz çözüm yolu aynı zamanda GTMetrix analizlerindeki “serve scaled images” sorununu da ortadan kaldırır. Yukarıdaki ekran alıntısında görüldüğü gibi ben kendi web sitemde (othemes.net) 369×277 piksellik alan için 1000×750 piksel boyutlarında bir görsel kullanmışım. Bu da siteyi yavaşlatan önemli bir unsur.

Çözüm

Bu problemin çözümü için WordPress; 4.4 güncellemesiyle beraber img srcst özelliğini de yapısına ekledi. Bu özellik sayesinde sayfa yüklenmeden önce tarayıcıdan görsellerin yükleneceği alanın boyutu alınıyor ve tarayıcıda gösterilmesi için sizin belirlediğiniz görsel sunuluyor. Yani seçim işini tarayıcıya bırakmıyorsunuz. Çok mantıklı ama buradaki esas olay hangi çözünürlükte hangi görselin yükleneceğinin belirlenmesi ve bu da tamamen kullandığınız temanın işi.

Bu sorunun nasıl çözüldüğünü daha iyi anlamanız için örneklerimi Yirmi Onaltı teması üzerinden göstereceğim. Böylelikle siz de ne yaptığımızı elinizin altındaki bu temadan takip edebileceksiniz.

Kod Yapısı

Yirmi Onaltı temasında functions.php dosyasını açtığınızda karşınıza iki tane fonksiyon çıkacak. Birincisi yazı ve sayfalarda içerik içine eklediğimiz görselleri sunan “content_image” fonksiyonu:

İkincisi ise sadece öne çıkarılmış görselleri listeleyen “post_thumbnail” fonksiyonu:

WordPress Öne Çıkan Görsel

Örnek olması açısından öne çıkarılmış görselleri sunan fonksiyona bakalım.

Koda daha dikkatli baktığımızda öne çıkan görselleri sunmak için “wp_get_attachment_image_attributes” fonksiyonunu kullandığını görüyoruz. Bu WordPress’in standart fonksiyonlarından biri. Bazı haber temaları da özel galeriler oluşturmak için bu fonksiyonu kullanır. Burada da fonksiyon kullanılmış ve çıktı filtrelenmiş ( filtre nedir ).

Yani olayı sadeleştirirsek: Yazıda kullanılan öne çıkarılmış görselin tüm özelliklerini çeken bir fonksiyon kullanılıyor ve WordPress henüz öne çıkarılmış görseli bize göstermeden çıktı filtrelenip öyle listeleniyor. Yani WordPress’in resim sunma işini kesip bizim filtrelerimize göre yaptıracağız 😉

Şimdi örnek üzerinden detaylı inceleyelim:

if ( 'post-thumbnail' === $size ) {
	// $size gösterilmek istenen görselin boyutunu veriyor, koşula bağlı olarak görsel boyutu hedefleniyor
}

* Burada ‘post-thumbnail’ === $size kısmında $size yerine önceden tanımladığınız öne çıkarılmış görsel ismini yazabilirsiniz.

Yukarıdaki kodda Yirmi Onaltı temasını yapanlar öne çıkan görsel boyutunu Sidebar’ın aktif olup olmadığına bağlamışlar. Sidebar-1 isimli bileşen alanı aktifse öne çıkarılmış görsel niteliklerinden görsel boyutu ele alınsın ve şu işlem yapılsın değilse şöyle olsun gibi…

Siz de conditional tags dediğimiz bu koşulları kendi ihtiyacınıza göre belirleyebilirsiniz. Eğer anasayfadaysa şöyle olsun, kategori sayfasındaysa şöyle olsun vs vs…
Koşullara buradan bakabilirsiniz: WordPress Conditional Tags

  • Eğer viewport 709px ve bundan küçükse; öne çıkarılmış görsel total viewport genişliğinin %85’i kadar bir alanı kaplasın.
  • Eğer viewport 709px ile 909px arasında bir genişliğe sahipse; öne çıkarılmış görsel total viewportun %67’si kadar bir alanı kaplasın

Viewport: kullanıcının tarayıcıda görebildiği alan demektir. Kodun en sonunda gördüğümüz 840px ve 1200px değerleri öne çıkarılmış görselin alabileceği maksimum genişlik değerleridir. Buraya öne çıkarılmış görseli eklerken belirlediğiniz genişlik değerini yazmanız önemlidir yoksa resim kendi boyutundan fazla genişler ve bozulur.

Çıktı ve Hazır Kod

Şimdi hepsini toparlayalım ve öğrenmeyi pek sevmeyenler veya okumaktan sıkılanlar için hazır bir şeyler yapalım.
İlk önce temamıza öne çıkarılmış görsel özelliği kazandıralım (yoksa):

Ardından bu görselimizin anasayfadaki yazılarımızda nasıl görüneceğini belirleyelim:

Kodun çıktısı:

Gördüğünüz gibi her çözünürlükte farklı boyutlarda kırpılmış görselleri listeletebiliyoruz. Bunu geliştirmek ve farklı durumlarda farklı şekillerde kullanmak size kalmış. İstediğiniz kadar koşul ekleyip istediğiniz sayıda görseli filtreleyebilirsiniz. Sonuç olarak bu işlem site performansını önemli ölçüde etkileyecek ve sunucu yükünü de aynı oranda azaltacaktır.

Hoşçakalın. Bu ilk yazımdı. Umarım anlatabilmişimdir 🙂

 

Ziyaretçi Yorumları

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Tüm yazılar
Mehmet ARIK - Freelance Web Tasarımıcısı - WordPress Developer


Benimle çalışabilirsiniz

Tasarım ve kodlama bakımından kusursuz bir web sitesine sahip olun. Bir projeniz veya aklınızda uygulanabilecek güzel fikirler varsa benimle paylaşmaktan çekinmeyin.

Her türlü iş teklifi, aklınıza takılan konular veya üzerine değinilebilecek içerik fikirleriniz için bana yazabilirsiniz.

İletişime Geç