Get_template_part () nasıl kullanılır?


25

Birisi lütfen bana bu fonksiyonun nasıl çalıştığını açıklayabilir mi? Ne yaptığını biliyorum ama twenty_ten şablonundaki kaynak koduna baktığımda, tüm döngülerin tek bir loop.php içinde nasıl toplandığını anlamıyorum (bu dosyayı da gördüm).

Öyleyse, örneğin şablonun ortak bir bölümünü nasıl soyutlar ve sonra diğer şablonlar arasında yeniden kullanırsınız?


Yanıtlar:


25

Bazı çok iyi tanıtım cevapları burada.

Temel olarak, get_template_part()tema geliştiricilerin şablon dosyalarının belirli bir düzenini ayarlamalarına izin verir. CSS seçicileri için geçerli olduğu gibi spesifikliğe benzer şekilde düşünün. Bir şeyi tasarlarken, en az özgünlükle başlamak istersiniz, böylece bir tasarımın bireysel dikkat gerektiren kısımlarında kolayca geçersiz kılınabilir.

Örneğin, bir blog tasarlıyorsunuz ve yayınları işaretlemek için iyi çalışan bir loop.php dosyası oluşturuyorsunuz. Ancak, önceden plan yaparsınız ve bunu şablon dosyalarınızda daha sonra ek bağlam belirleyicileriyle çağırırsınız - örneğin, dizin sayfasında, get_template_part( 'loop', 'index' );tek bir şablonda, aradığınızda get_template_part( 'loop', 'single' );, arşiv sayfalarında, aradığınızda get_template_part( 'loop', 'archive' );vb. Bu, arşiv sayfalarınızdaki döngüyü ana sayfadan farklı bir şekilde işaretlemeye karar verdiğinizde yolun aşağısını kolaylaştırır: sadece bir loop-archive.php şablonu oluşturun ve bu genel loop.php yerine kullanılacaktır .

Ama sihirli arkasında get_template_part()fonksiyonunda olduğu locate_template()ilk teması dizin, dosya için daha sonra üst dizin (varsa) adlı hangi çekler,. Bu eklenti geliştirme için çok yararlıdır. Eklentilerimden birinde, özel bir gönderi türü tanımlarım ve bu özel gönderi türü için eklenti dizinimde bir döngü şablonu dosyası oluşturdum. Ama ... Eklentilerimi kullanan temaların işaretlemeleri geçersiz kılmaları için izin verirlerse, isterlerse. Burası locate_template()gerçekten harikalar yarattığı yer.

locate_template($template_names, $load = false, $require_once = true )

Her biri, stil sayfası dizinindeki $ template_names dizisindeki ve ardından şablon dizinindeki arar. $ Load argümanı olarak 'true' ifadesinin bulunması, ilk dosyanın bulunmasını gerektireceği ve hiçbir şablon dosyası bulunmazsa boş bir dize döndüreceği anlamına gelir . Böylece eklentimde böyle bir şey yapabilirim:

if ( '' === locate_template( 'loop-mycustomposttype.php', true, false ) )
    include( 'loop-mycustomposttype.php' );

... tema geliştiricilerin kendi eklentilerimi özelleştirmelerini çok kolaylaştıracaklar, sadece kendi temalarına loop-mycustomposttype.php isimli bir dosya ekleyerek .


2
Lütfen locate_template'i değiştirin. include(locate_template( 'loop-mycustomposttype.php')) Bu şekilde değişkenleri geçmek mümkündür. Bu burada buldum linki . Bu son derece yararlı!
Pablo SG Pacheco,

1
Bunu yapmak, aynı zamanda bunu değiştirmek için gerekli olacak. Bunun gibiif ( false === include(locate_template( 'loop-mycustomposttype.php')) )
Pablo SG Pacheco,

1
Oh, iyi nokta. Verdiğim formülle, requireveya require_oncecall (from locate_template) bir işlevin içindedir ve bu nedenle o anki kapsama giremez.
goldenapples

5

Tüm döngüler değil, ana döngü. ;-) Baş sayfanıza ya da bir kategoriye bakarsanız ya da kimin ne olduğunu bilemezseniz, her zaman bir ana döngüye sahip olacaksınız. Bu ana döngünün içeriği, şablonunuz çağrılmadan önce çalıştırılan sorgu ile belirlenir .

Loop.php şablonu sadece döngüdeki öğeler üzerinde çalışır ve bunları biçimlendirir. Kodeks'teki belgelere bakın .

Eğer Yirmi Ten'in loop.php bakarsak görebilirsiniz Yirmi Ten sonra diversifies olduğu içinde bu tek şablon dosyası.

get_template_part()sadece bir şablon parçasını yükler ve üzerinde çalışır. Ayrıca, loop.php dosyanızın parçalarını ayrı dosyalara ayırabilir ve bunları get_template_part('loop', 'category')vb.

Yoksa döngü içinde her yazı için yarı şablon var ve loop.php yalnızca aramasını söyler misiniz get_template_part('loop','post');dahilinde while...maddesi. Her şey sana bağlı.


3

Gönderen get_template_part kodeksine :

<?php get_template_part( 'loop', 'index' ); ?>

var olan ilk dosya için bir PHP gereksinimi () yapacak ...

Böylece etkili bir şekilde başka bir php dosyası gerektiriyormuş gibi çalışacaktır.

Güncelleme : 'Zorunluluk' için küçük bir fark var - Bir işlevin içine sarılmıştır, bu nedenle globalşablonunuzdan şablon kısmınıza herhangi bir değişken iletmek istiyorsanız bunu yapmanız gerekir .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.