Online Kimya Özel Dersi Al

ÜCRET

KONU

TARİH

2.5 Şablon Hiyerarşisi

wordpress tema yapımı

Bu dersin amacı, WordPress temasındaki, şablon dosyaları arasında kaybolanlara yolunu göstermektir. Bu dersi anladığınızda, WordPress’in, şablon dosyalarını kullanma mantığını anlamış olacaksınız, oluşturduğunuz her içerik için, ona özel bir şablon hazırlayabileceksiniz, Çünkü; WordPress’in, hangi şablon dosyasını hangi içerik için ve hangi koşullarda kullandığını anlayacaksınız. Dahası, hazır bir tema kullanıyorsanız, temada bir değişiklik yapmak istediğinizde hangi şablon dosyasına bakmanız gerektiğini anlamış olacaksınız.

WordPress’in şablon dosyaları; tam sayfa şablon dosyaları ve şablon parçaları olarak iki şekilde düşünülebilir. “Şablon dosyası” denildiğinde kastedilen şey, genellikle tam sayfa şablon dosyasısıdır. header.php ve footer.php… gibi dosyalar, şablon parçalarıdır. single.php, category.php, page.php… gibi dosyalar ise tam sayfa şablonlarıdır. Şablon hiyerarşisi denildiğinde, tam sayfa şablon dosyalarının hiyerarşisi kastedilir.

Koşullu ifadeler kullanarak, bir şablonun belli sayfalarda veya belli koşullarda görünmesini de sağlayabilirsiniz.

Şablon Dosyalarının Hiyerarşisi

WordPress, bir sayfayı, hangi şablon dosyasını kullanarak gösterileceğine o sayfanın URI (Uniform Resource Identifier) ifadesine, yani bizim bildiğimiz anlamda adresine bakarak karar verir. WordPress sayfa adreslerine “kalıcı bağlantılar” der. Sayfaların adresinde bulunan GET parametrelerine query_string (sorgu ifadesi) denir. Query string ifadeleri, sitenin kök adından hemen sonra gelen bir soru işareti (?) ile başlar ve ampersand (&) işareti ile birbirinden ayrılmış bir çok parametre içerebilir ve bu parametreler, sayfada gösterilen içerik hakkında bilgi verir.

Örnek-1

https://benimsitem.com/?post_type=post&author_name=baris%20manco

Yukarıdaki sayfa adresi (URI ifadesi) ile bir WordPress sitesinde, Baris MANCO adlı yazarın yazdığı bütün “yazılar” listelenecektir.

WordPress, daha okunaklı adresler (kalıcı bağlantılar) kullandığı için, yukarıdaki örnekte yazdığınız adres, sayfa açıldıktan sonra daha anlaşılır bir hale dönüşecektir. Bu WordPress’in SEO için kullandığı güzel bir özelliktir.

Basitçe ifade etmek gerekirse, WordPress, sayfanın adresindeki parametrelere denk gelen içerik tipini anlar ve bu içerik tipi için oluşturulmuş şablonu bulana kadar, şablon hiyerarşisini tarar ve uygun olanı bulduğunda gösterir. Bu olayı bir başka şekilde ifade etmek gerekirse, WordPress, hangi şablon dosyasının uygun olduğuna şöyle karar verir:

  1. WordPress, sayfanın adresine (query string ifadesine) bakarak, önce hangi içerik tipinin çağırıldığını anlar. (Örneğin, bir yazı, bir yazı arşivi, bir sayfa, bir arama sayfası gibi)
  2. Şablon hiyerarşisini tarayarak, o içerik için kullanılabilecek şablon dosyasını bulur.
  3. Bu içerik için kullanılabilecek birden fazla şablon dosyası varsa, hiyerarşide daha üst sırada olanı kullanır.

index.php dosyası, şablon hiyerarşisinin en altında bulunur. Eğer, WordPress, adres (query string) ifadesindeki parametrelere uygun bir şablon dosyası bulamazsa, son çare olarak index.php dosyasını kullanır. Yani index.php dosyası, bütün içerikler için, joker şablon dosyasıdır ve bu yüzden de WordPress temalarında zorunlu olan iki dosyadan biridir.

Örnek-2

Örnekler, WordPress’in kullandığı kalıcı bağlantılar (SEO dostu URI’lar) üzerinden verilecektir.

Blog adresiniz; https://siteadi.com/ şeklinde olsun. Bir ziyaretçiniz, https://siteadi.com/category/kitaplar/ şeklinde bir linki tıklasın. WordPress, bu URI ifadesinden, “kitaplar” kategorisine ait yazı arşivini göstermesi gerektiğini anlar. Bu arşiv sayfasını, göstermek için uygun şablonu, şu adımları izleyerek bulur:

  1. Önce bu kategori adına hazırlanmış bir şablon dosyası var mı ona bakar: category-kitaplar.php
  2. Eğer category-kitaplar.php dosyasını bulamazsa bu defa bu kategorinin id değeri için hazılanmış bir şablon dosyası var mı ona bakar. Eğer “kitaplar” kategorisinin id değeri 6 ise: category-6.php
  3. Eğer category-6.php dosyasını bulamazsa bu defa bütün kategoriler için kullanılan category.php dosyasını arar.
  4. Eğer category.php dosyasını da bulamazsa, bütün arşivler için kullanılan archive.php dosyasını arar.
  5. Eğer archive.php dosyasını da bulamazsa, bu defa son çare olarak index.php dosyasını kullanır.

Şablon Hiyerarşisi Diyagramı

Aşağıdaki diyagram, WordPress’in şablon hiyerarşisini gösterir. Bu diyagrama bakarak, WordPress’in hangi içerik türü için, önce hangi dosyayı aradığını ve bir dosyayı bulamadığı zaman hangi dosyaya baktığını görebilirsiniz.

WordPress Şablon Hiyerarşisi Diyagramı

WordPress, bu diyagramı soldan sağa doğru (—>) takip ederek, ekrandaki içeriğe uygun olan ilk şablon dosyasını kullanır. Yani, bir içerik için, iki farklı şablon dosyası hazırlamak demek, birini boşuna hazırlamak demektir. Çünkü, WordPress, her zaman, bu iki dosyadan, diyagramın daha sağında olanı tercih edecektir ve solda kalan hiç bir zaman kullanılmayacaktır. Mesela, temanızda;

archive.php
singular.php
home.php
404.php
search.php

şablon dosyalarının hepsi varsa, index.php dosyanızın yolu kesilmiş olur ve hiç bir zaman kullanılmaz. Fakat, her WordPress temasında, oluşturulması zorunlu bir dosya olduğu için, tasarımcılar, bu durumlarda index.php dosyalarına, “Söz gümüşse sukut altındır” anlamına gelen şu ifadeyi yazarlar:

/* Silence is golden */

Aynı şekilde, temanızda:

single.php
page.php

şablon dosyaları varsa da, singular.php şablon dosyasının yolu kesilir ve temanızda bu dosyayı bulundurmak, sadece zaman ve yer kaybı olur.

Diyagramdaki renklerin anlamları şöyledir:

  • Siyah: Bu alanlar şablon dosyalarını değil, sayfa tiplerini, bir başka ifade ile içerik tiplerini gösterir. WordPress, önce ekrandaki sayfanın içeriğine bakar ve içerik tipini anladıktan sonra, o içerik tipi için hazırlanmış şablon dosyasını aramaya başlar.
  • Turuncu: Değişken şablonlardır. Bu şablonlar yoksa, yerlerine yeşil şablonlar kullanılır.
  • Yeşil: İkincil şablonlardır. Bu şablonlar yoksa, yerlerine mor şablon dosyaları kullanılır. front-page.php şablonu bu kuralın istisnasıdır. Bazı durumlarda, front-page.php şablonu yerine, değişken şablonlar da kullanılabilir. Bu ayrıntı ile ilgili detaylı bilgiyi aşağıda bulacaksınız.
  • Mor: Birincil şablonlardır. Bu şablonlardan sadece index.php dosyası zorunludur. Çünkü, diğer birincil şablonların yokluğunda, yerlerine, index.php dosyası kullanılır.

Şablon Hiyerarşisi Detayları

Diyagramlar ile veya İngilizce ile aram iyi değildir diyorsanız, buyurun, WordPress’in şablon hiyerarşisini bir de böyle anlamaya çalışalım.

Ana Sayfa Şablonu (Site Front Page)

Ana sayfa konusu başlangıçta biraz karmaşık gelebilecek bir konudur. Fakat biz, bu başlık altında bu karmaşıklığı çözeceğiz ve her şey berrak olacak.

Öncelikle, WordPress sitenizinin ana sayfası için, hangi şablonun kullanılacağı, yönetim panelinizdeki Ayarlar->Okuma menüsünde yaptığınız tercihe bağlıdır.

WordPress Ana Sayfa Ayarları

Yukarıdaki resimde de görüldüğü gibi, ana sayfanız iki farklı şekilde oluşturulabilir. Bunlar:

  1. En son yazılarınız: Eğer bu seçeneği işaretlerseniz, WordPress ana sayfanızı oluşturmak için, tema dosyalarınız arasında, önce front-page.php dosyasını arar. Bulamazsa home.php dosyasını arar. Onu da bulamazsa, ana sayfanızı index.php dosyasındaki şablona göre oluşturur.
  2. Sabit sayfa -> Ana sayfa: Ana sayfa görüntülenmesi için “Sabit sayfa” seçeneğini seçerseniz, sizden iki alan için, ayrı ayrı sayfa tercihi yapmanız istenir. Bunlardan ilki, “Ana sayfa” alanıdır. Ana sayfa alanı için hangi sayfayı seçerseniz seçin, WordPress, sitenizin ana sayfasını oluşturmak için önce front-page.php dosyasını arar. Bulamazsa seçtiğimiz sayfaya özel bir şablon dosyası arar (page-{sayfa-adi}.php veya page-{id}.php veya benim-sayfam.php gibi…). Onu da bulamazsa page.php dosyasını arar. Onu da bulmazsa index.php dosyasındaki şablona göre bir anasayfa oluşturur.

Sabit sayfa -> Yazı sayfası: Sabit sayfa seçeneğinde, Yazı sayfası adında ikinci bir tercih alanı daha vardır. Yazı sayfası olarak tercih ettiğiniz sayfanın şablonu ise, home.php dosyası, yoksa index.php dosyasıdır.

Ana sayfa görüntülenmesinde, sabit sayfa seçeneğini seçtiysek, ana sayfa ve yazı sayfası tercihleriden en az biri için bir sayfa seçmemiz gerekir. Eğer hiç bir seçim yapmazsak, WordPress, ana sayfamız olarak, “En son yazılarınız” seçeneğini geçerli sayar.

Hala kafanızda soru işaretleri varsa, belki aşağıdaki diyagram bütün bu soru işaretlerini silebilir.

Ana sayfa tercihi         Hiyerarşi
===================       ====================

En son yazılarınız        -> front-page.php -> home.php -> index.php

Sabit sayfa: Ana sayfa    -> front-page.php -> ozel-sablon.php -> page-{sayfa-adi}.php -> page-{sayfa-id}.php -> page.php -> index.php

Sabit sayfa: Yazı sayfası -> home.php -> index.php

Belki sizin de dikkatinizi çekmiştir: Eğer temanızda front-page.php şablonu varsa, ana sayfanız, her koşulda bu şablon ile oluşturuluyor.


Tek Yazı (Single Post)

Yönetim paneli : Yazılar->Yeni ekle menüsünü kullanarak oluşturduğunuz her içerik bir yazıdır. Kullanıcılarınız, web sitenizde, yazı türünden bir içeriğinize tıklayarak, o yazıyı görmek isterse, WordPress, o yazının şablonunu, şu hiyerarşiye göre oluşturur:

  1. single-{yazi-tipi}-{yazi-adi}.php: Bu şablon, WordPress 4.4 versiyonundan itibaren tanınır. WordPress, dosya isminde, adını belirttiğiniz yazıyı göstermek için bu şablonu kullanır. Yani bu şablon tek bir yazıya aittir. Örneğin, “kitaplar” diye bir yazı tipiniz var ve bu yazı tipinde yazdığınız “son-kitabimdan-parcalar” adında bir yazınız var. Eğer bu yazınıza özel bir sayfa şablonu oluşturmak istiyorsanız bunu, single-kitaplar-son-kitabimdan-parcalar.php dosyası ile yapabilirsiniz.
  2. single-{yazi-tipi}.php: Bir yazının kendisine özel bir şablonu yoksa, o yazı, ait olduğu yazı tipine özgü olarak hazırlanan bu şablona göre sunulur. Örneğin, “kitaplar” adında bir yazı tipiniz varsa, bu yazı tipinde oluşturulan bütün yazılarınız single-kitaplar.php şablonu ile gösterilecektir.
  3. single.php: Bir yazı tipine mahsus bir şablon hazırlamazsanız, o yazı tipinizde yazılan bütün yazılar, bu şablona göre gösterilecektir.
  4. singular.php: single.php dosyasının olmadığı temalarda, onun yerine bu şablon kullanılır.
  5. index.php: Eğer yukarıdaki hiyerarşide bulunan dosyalardan hiç biri yoksa, WordPress son çare olarak, bu doyayı şabon olarak kullanır.

Tek Sayfa (Single Page)

WordPress ile gelen standart içerik tiplerinden ikincisi de sayfalardır. Yönetim paneli:Sayfalar->Yeni ekle menüsünü kullanarak oluşturduğunuz her içerik bir sayfadır. Sayfalarınız için kullanılacak şablon hiyerarşisi şu şekildedir:

  1. Genel şablon: Adını, istediğiniz gibi koyarak bir sayfa şablonu oluşturabilirsiniz. Daha sonra bu şablonu, yeni bir sayfa eklerken, Belge->Sayfa özellikleri->Şablon menüsünü takip ederek, istediğiniz her sayfa için kullanabilirsiniz. Ya da, temanızın herhangi bir yerinde, bu şablonu çağırmak isterseniz, get_page_template() fonksiyonunu kullanarak çağırabilirsiniz.
  2. page-{sayfa-link-adi}.php: Eğer sayfanız için genel bir şablon kullanmadıysanız ve syafanızın link adı, “en-son-haberler” ise, Wodpress bu sayfayı göstermek için tema dosyalarınızın arasında page-en-son-haberler.php dosyasını kullanacaktır.
  3. page-{id}.php: Eğer bir önceki adımdaki şablon dosyası yoksa ve sayfanızın id değeri 6 ise WordPress, bu sayfa için page-6.php şablonunu kullanacaktır.
  4. page.php: Eğer sayfanıza ait yukarıdaki şablonlardan hiç biri yoksa, bu şablon kullanılır.
  5. singular.php: Eğer page.php dosyanız yoksa, onun yerine bu dosya kullanılır.
  6. index.php: Hiç biri yoksa, yine can simidi bu dosyadır.

Kategori (Category)

WordPress, bir kategoriye ait yazı arşivinizi sunmak istediğinizde, aşağıdaki hiyerarşiyi kullanır:

  1. category-{katetori-adi}.php: Eğer “haberler” diye bir kategoriniz varsa, WordPress, bu kategorinin arşivi için önce category-haberler.php doyasını arar.
  2. category-{id}.php: Yukarıdaki şablon yoksa ve kategorinin ID değeri 6 ise, WordPress category-6.php dosyasını arar. Bu da yoksa, aşağıdaki sırayla aramaya devam eder.
  3. cagetory.php
  4. archive.php
  5. index.php

Etiket (Tag)

Tıpkı kategori gibi, bir etikete sahip yazı arşivinizi sunmak istediğinizde, WordPress bu arşivi aşağıdaki hiyerarşik düzende, ilk bulduğu dosya şablonuna göre gösterir.

  1. tag-{etiket-adi}.php: Eğer “spor” diye bir etiketiniz varsa, bu etiketi eklediğiniz yazıları göstermek için, WordPress önce tag-spor.php doyasını arar.
  2. tage-{id}.php: Eğer etiketin id değeri 6 ise tag-6.php dosyası kullanılır.
  3. tag.php
  4. arcihve.php
  5. index.php

Özel Sınıflandırmalar (Custom Taxonomies)

Özel sınıflandırmalar, register_taxonomy() fonksiyonu ile, sizin oluşturduğunuz sınıflandırma yöntemleridir. Bu sınıflandırma yöntemleri için WordPress, şu hiyerarşiye göre hareket eder:

  1. taxonomy-{siniflandirma_adi}-{sinif-adi}.php: Mesela sitenizde çok fazla ürün var ve “arabalar” diye bir sınıflandırma yöntemi oluşturdunuz. Bu sınıflandırma yöntemine ait olarak da “opel” diye bir sınıf oluşturdunuz. taxonomy-arabalar-opel.php sayfası, bu sınıftaki bütün içerik arşiviniz şablon olarak kullanılacaktır.
  2. taxonomy-{siniflandirma_adi}.php: “arabalar” adında bir sınıflandırma yönteminiz varsa, taxonomy-arabalar.php şablonu bu sınflandırmaya ait bütün içeriklerinize şablon olacaktır.
  3. taxonomy.php
  4. archive.php
  5. index.php

Özel Yazı Tipleri (Custom Post Types)

register_post_type() fonksiyonu ile sizin oluşturduğunuz yazı tiplerine, özel yazı tipi denir. Özel bir yazı tipine ait arşivinizi göstermek için kullanılacak şablon hiyerarşisi şöyledir:

  1. archive-{post_type}.php: Eğer yazı tipinizi “urunler” olarak kaydettiyseniz, ürünlerinizin sıralanması için önce, archive-urunler.php dosyası aranır.
  2. archive.php
  3. index.php

Yazar (Author)

Bir yazara ait bütün yazıları göstermek için, sırasıyla, aşağıdaki şablonlara başvurulur:

  1. author-{guzel-adi}.php: Yazarın güzel adı “ahmet” ise, önce author-ahmet.php dosyası aranır.
  2. author-{id}.php: Eğer yazarın id değei 6 ise author-6.php dosyası aranır.
  3. author.php
  4. archive.php
  5. index.php

Tarih (Date)

Tarihe dayalı yazı arşiviniz için kullanılan şablon hiyerarşisi:

  1. date.php
  2. archive.php
  3. index.php

Arama Sonuçları

Arama sonuçlarını, aşağıdaki şablon hiyerarşisi ile sunarsınız:

  1. search.php
  2. index.php

404 – Hata Sayfası (Sayfa Bulunamadı)

Eğer, sitenizde olmayan bir bağlantıya ulaşılmak istenirse, bulunamadı mesajı için dilediğiniz gibi bir şablon hazırlayabilirsiniz. WordPress bu sayfa için şu hiyerarşiyi takip eder:

  1. 404.php
  2. index.php

Ortam Dosyası (Attachment)

Bir ortam dosyası için (ortam tipindeki içerikler için) kullanılacak şablon dosyasının hiyerarşisi şöyledir:

  1. {MIME-type}.php: Ortam dosyalarının MIME tipine bağlı olarak, oluşturulabilecek şablonlar şunlardır: image.php, video.php, pdf.php. Text dosyaları için de sırasıyla; text-plain.php, plain.php, text.php şablonları kullanılır.
  2. attachment.php
  3. single-attachment-{doya-adi}.php: Eğer, ortam dosyanızın adı “tatil” ise, WordPress single-attachment-tatil.php şablonunu arar.
  4. single-attachment.php
  5. single.php
  6. singular.php
  7. index.php

Gömülü İçerikler (Embeds)

Gömülü içerikler için kullanılacak şablon dosyası, gömülü durumdaki yazılar için kullanılır. WordPress 4.5 sürümünden bu yana, gömülü yazılar için şu hiyerarşiyi kullanır.

  1. embed-{yazi-tipi}-{yazi-formati}.php: WordPress, önce yazı tipine göre bir şablon arar ve daha sonra da bu yazının formatına bakar. Örneğin, audio formatında bir yazınız varsa ve yazı tipi de post (yazı) ise, WordPress, embed-post-audio.php dosyasını arayacaktır.
  2. embed-{yazi-tipi}.php: Eğer yazı tipiniz kitap ise, WordPress; embed-kitap.php şablonunu arayacaktır.
  3. embed.php: Yukarıdaki şablonlar yoksa bu şablon kullanılır.
  4. Hiç biri yoksa, WordPress, wp-includes/theme-compat/embed.php şablonunu kullanacaktır.

Non-ASCII (ASCII Dışı) Karakter Kullanımı

WordPress, 4.7 versiyonundan bu yana, şabon isimlerinin değişken kısımlarında, non-ASCII karakterlerini kabul etmektedir. Non-ASCII karakterleri içeren şablon isimlerinde, dosya ismi, önce un-encoded ardından encoded karakter gelecek şekilde yazılmalıdır.

Örneğin; “Merhaba ☺” adında bir sayfanız varsa, ve bu sayfanın ID değeri de 6 ise, şablon hiyerarşisi şöyle olacaktır:

  • page-merhaba-☺-.php
  • page-merhaba-%E2%98%BA.php
  • page-6.php
  • page.php
  • singular.php

Aynı durum, yazı isimleri, term (terim) isimleri, yazarların güzel isimleri (author nicenames) için de geçerlidir.

Hiyerarşiyi Etkileme

WordPress şablon sistemi, bize, yukarıda bahsettiğimiz hiyerarşiyi filtreleyerek etkileme imkanı da tanır. Yani, hiyerarşinin belli noktalarında, bazı eklemeler yapabilirsiniz ve bazı şeyleri değiştirebilirsiniz. Bunun için WordPress’in filtreleme fonksiyonunu (add_filter()) kullanmalısınız (Bu iş için kullanacağınız filtreleme fonksiyonu get_query_template() fonksiyonu içinde bulunmaktadır.).

Filtrelemek istediğiniz şablonların, filtre etiketleri (tags) aşağıda verilmiştir:

  • embed_template
  • 404_template
  • search_template
  • frontpage_template
  • home_template
  • taxonomy_template
  • attachment_template
  • single_template
  • page_template
  • singular_template
  • category_template
  • tag_template
  • author_template
  • date_template
  • archive_template
  • index_template

Örnek:

Bu örnekte, yazarlara ait şablon hiyerarşisine, yazar rölüne göre oluşturacağımız şablon dosylarını dahil edeceğiz. Dahil edeceğimiz bu şablonlar, author.php dosyasından hemen önce uygulanacak.

Yazarlar şablonlarının varsayılan hiyerarşisi şöyledir:

  • author-{guzel-adi}.php
  • author-{id}.php
  • author.php

author.php şablonundan önce, author-{rol}.php şeklinde bir dosya ile, yazarların rolüne göre bir şablon eklemek isityorsak, author_template etiketini kullanarak şablon hiyerarşisini filtrelememiz gerekir. Bunu yaptığmızda şunu başarmış olacağız: Mesela, kullanıcınız bir “editör” ise rolü de “editor” olacaktır. O zaman, “author-editor.php” adında bir şablon hazırlarsak, WordPress bu kullanıcının ve rolü aynı olan bütün kullanıcıların, yazdığı yazıları göstermek için bu şablonu kullanacaktır. Aşağıda, bu işi yapan kodları görüyorsunuz:

function yazar_rol_sablonu( $templates = '' ) { 
    $author = get_queried_object(); // yazarın bilgilerini getirdik
    $role = $author->roles[0]; // yazarın rolünü öğrendik
    if ( ! is_array( $templates ) && ! empty( $templates ) ) { 
        $templates = locate_template( array( "author-$role.php", $templates ), false ); 
    } elseif ( empty( $templates ) ) { 
        $templates = locate_template( "author-$role.php", false ); 
    } else { 
        $new_template = locate_template( array( "author-$role.php" ) ); 
        if ( ! empty( $new_template ) ) { 
            array_unshift( $templates, $new_template ); 
        } 
    } 
    return $templates; 
} 
add_filter( 'author_template', 'yazar_rol_sablonu' );

DERSİN SONU

Kimya Özel Dersi Al

Yorum yaparak bize destek olabilirsiniz.

4 yorum “2.5 Şablon Hiyerarşisi”

Bir cevap yazın

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

Şu kadar HTML serbest:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>