Şablon hiyerarşisine gizlice girin
Şablon hiyerarşisi, WordPress’teki en sevdiğim özelliklerden biridir. Bu sadece çocuğun temasına izin vermekle kalmaz, aynı zamanda tüm ekosistemi daha iyi hale getirir, çünkü daha küçük parçalara yerleştirilecek daha fazla kod yazılabilir. Bu iyi. Bu konuda da harika olan, her şeyin nispeten küçük kod parçalarıyla etkinleştirilmesidir. Ama onlara bakmak bizi WordPress’in en ilginç kısımlarında açıklamaya başladı. Bu yazı PHP ile biraz yakınlık varsayar, bu yüzden asla yapmazsanız, biraz dönebilirsiniz. Ancak bu çok karmaşık ve sarhoş edici değil, bu yüzden bizimle birlikte kalan yeni başlayanlar bile kesinlikle bir veya iki şey öğrenecek.
Bu yazı şablonu hiyerarşisinin kısa bir özeti, şablon hiyerarşisinin tam bir özetini içermeyecektir. Ancak biraz anlayış yararlıdır. Şablon hiyerarşisi temelde WordPress’te iki şey yapar:
Bu, temanın WordPress’te farklı genel durumlar için kolayca birçok farklı dosya içermesini sağlar: kategori arşivleri, tek gönderi sayfaları vb. Şablon hiyerarşisi, WordPress’in aralarında seçim yapma şeklidir ve yazar temasının çalışmalarını biraz daha kolay hale getirir.
Bu, çocuğun temasının kullanılan ana tema ile aynı sürece girmesini ve bireysel şablon seçeneğinin kendisiyle gelmesini sağlar. Çocuğun temasını bu kadar güçlü kılan şey budur: Ebeveyn temasının küçük kısımlarını her şeyi yapmak zorunda kalmadan hızla değiştirebilirler.
Bu biraz böyle görünüyor:
Locate_template işlevi ($ template_names, $ load = false, $ requir_once = true) {$ cound = ”; foreach ((dizi) $ template_names olarak $ template_name) {if (! $ template_name) devam eder; if (file_exist (stylesheetpath. ‘/’. $ template_name; kırmak; } elseif (file_exist (templatePat. ‘/’. $ template_name)) {$ coolde = templatePath. ‘/’. $ template_name; kırmak; }} if ($ load && ”! = $ comece) load_template ($ cound, $ requir_once); Return $ comeed; } Temel olarak, Locate_template, aranması gereken bir dizi şablon olarak adlandırılır. Çekirdek iş, ilk olarak devam eden dizi öğesinin String olmasını sağladığı görülen Foreach Loop’dur. Evet ise, verilen adla dosya için Child tema klasöründe (StylesheetPath, çocuk tema dosya sisteminin yoludur) görülürler – “Archive.php” hakkında düşünün. Eğer bulursanız, Foreach’ten kopar. Yani: Döngü ve döngü sonuna hareket etmeyi durdurun. Eğer bulamazsanız, “ebeveyn” temasını arayın (yine, Templatah ana tema dosya sisteminin yoludur).
Bunun için gerçekten var. Verilen dizideki tüm dosyaları tekrarlar ve uygun bir dosya bulamazsanız, başlangıçta boş bir dize ile ayarlanan $ değerini döndürür. Listeyi çocuğun temasında veya (sonra) üst temada çalıştırırken uygun bir tane bulursanız, dosyaya tam dize yolunu döndürür. Bu, nasıl adlandırıldığına bağlı olarak, Load_Template işlevinin kendisine ekstra yoldan geçenleri depolamak için dosyaları yükleyecektir. Bu oldukça basit bir işlev, locate_template ve bende sevdiğim çok sayıda küresel değişken yok. Ama yine de şablon hiyerarşisinin – ve get_template_part () ve get_header () gibi ilgili işlevlerin ana nedenidir – çocuk temasıyla çalışın. Oldukça temiz! Bu hafta yeni koddaki gerçek şablon hiyerarşisi Bu makaleyi incelerken, WordPress’teki şablon hiyerarşisinin kendisini izlemek için gerçekten zaman ayırdım. Bence kodu bulamam gereken bir projenin sağlamlığı hakkında iyi konuştu. Bence merakım hakkında kötü konuştu. Ancak, şablon hiyerarşisi nasıl çalışır, böylece blog yazısı isteği single.php’de durursa, tema varsa, ancak değilse index.php olmaya devam eder?
Temel olarak WordPress sitesine Project Root’taki index.php dosyası aracılığıyla tüm talepler. Çizgiler içerir:
tanımlama (‘wp_use_themes’, true);/** WordPress ortamını ve şablonunu yükler*/requir (dirname (__file__). ‘/Wp-blog-header.php’);WP-Blog-Header.php üzerinden çekin.Ve wp-blog-header.php şu zamanları içerir: if (! İsset ($ wp_did_header)) {$ wp_did_header = true;Requir_once (dirname (__ dosya__). ‘/Wp-load.php’);wp ();Requir_once (abspath. Wpinc. ‘/Template-loader.php’);} Bizim için ilginç olan son satırdır: request_once (abspath. Wpinc. ‘/Template-loader.php’);.Bu, sayfaları görüntülemek için bir tema kullanılacaksa bir şablon hiyerarşisi içeren dosyadır.Dosya tam olarak görüntülenemeyecek kadar büyük, ancak bizi çeken temel kısım 58-91 satırıdır:
if (tanımlanmış (‘wp_use_themes’) && wp_use_themes): $ template = false; if (is_404 () && $ template = get_404_template ()): elseif (is_search () && $ template = get_search_page ()): elseif (is_front_page ()): elseif = get_front_page_template = get_home_tempate () _pe () $ template = get_post_type_archive_template ()): elseif (is_tax () && $ template = get_taxonomy_template () ‘the_concent’, ‘prepend_attachment’); elseif (is_single () && $ template = get_single_template ()): elseif (is_page () && $ template = get_page_template ()): elseif (is_page_template ()) ) && $ template = get_tag_template ()): elseif (is_author () && $ template = get_author_template ()):) && $ template = get_archive_template ()))): elseif (is_compments_popup () & us_compments_popup () & us_compments_temppenments () & us_compmentler : elseif (is_paged () && $ template = get_paged Endif; /*** Mevcut şablonun yolunu dahil etmeden önce filtreleyin. * * @Since 3.0.0 * * @param String $ Şablon Şablonun yolunu dahil etmek için. */ if ($ template = appling_filters (‘template_include’, $ template)) içerir ($ template); dönüş; Endif;
Bir dev blok, ardından basit bir PHP çağrısı içerir. Bu tüm basit ihtişamlı bir şablon hiyerarşisi! Tüm bunlar nasıl çalışır? WordPress geliştiricilerinin çoğu IS_404 () gibi işlevlerde deneyime sahip olacaktır. Görüntülenen sayfanın bu tür olup olmadığını cevaplarlar. Her şey daha önce burada düzenlenmiştir, bu yüzden onu işleyen mucizevi bir kara kutu olarak görebiliriz. Böylece etiket, çağrı şablonu = get_404_template () -lice ile birlikte kullanılır. Ve çadırın altında, neredeyse hepsi Locate_Template adını veriyor. 404 durumunda, işlevi şu şekilde görünüyor: function get_404_template () {return get_query_template (‘404’); } Parça için, ‘404’ dizesini almak ve 404.php olarak değiştirin ve ardından bir dizi olarak Locate_Template adresini çağırın. (get_query_template ayrıca bazı temel sanitasyon gerçekleştirir ve içinde uygulama için bir çağrı yapar, ancak sadece bu.
Peki şablon hiyerarşisi nasıl çalışır? Dev blok. 404 şablon dosyası yoksa, bir sonraki dal koşulu vb. Hiçbir şey çok karmaşık değildir. Ve hiçbir şey bulunmazsa, şablonların hiyerarşisi hakkında bildiğimiz gibi, dizin.php alır – get_index_template () sonuçları son seçimdir. Oldukça temiz, değil mi? Şablon hiyerarşisi hakkında öğrendiklerimiz umarım, bazı basit programlama özelliklerini gösterdik: bazı temel dosyalara sahip büyük if-elseif-else ağaçları, şablonların tüm hiyerarşisini çalıştırmak için yeterlidir. Umudum, bilgimin sizi yaptığıdır. WordPress ve bazı temel teknolojilerinin derinliklerine daha rahat dalış. Bu, şablon hiyerarşisinin çoğu geliştirici için çok ezoterik olması durumunda değil, ilk başta böyle düşünebilirler. Çoğu programlama ezoterik nedeniyle karmaşık değildir, ancak sadece mantığın nerede ve nasıl düzenlendiğine alışık olmadığınız için. Bilgi canlı bir inanç haline geldiğinde, tüm anlayış seviyeleri size açıktır. Mutlu Hacking! Kredi Resmi: Evan Kirby, Unssplash üzerinden