temadaki eylem kancaları ve get_template_part


15

Bana öyle geliyor ki her ikisi de son kullanıcının tema dosyalarını (alt temalar aracılığıyla) düzenlemeden bir temayı değiştirme fırsatı veriyor.

Benim sorum, bir yöntem diğerine tercih edilir.

Mesela şu an üzerinde çalıştığım bir tema ele alalım. Kancaların şablon bölümleriyle gidip gitmemeye karar vermeye çalışıyorum.

<?php get_template_part('before_sitecontainer' ); ?>
<div id="sitecontainer" class="sitecontainer" <?php //closed in footer ?>>

<?php get_template_part( 'before_topcontainer' ); ?>
<div id="topcontainer ">

    <?php get_template_part( 'before_topedge_navigation' ); ?>
    <?php get_template_part( 'topedge_navigation' ); ?>

    <?php get_template_part( 'before_site_header' ); ?>
    <?php get_template_part( 'site_header' ); ?>

    <?php get_template_part( 'before_second_navigation' ); ?>
    <?php get_template_part( 'second_navigation' ); ?>

    <?php get_template_part( 'after_second_navigation' ); ?>

</div><!-- end topcontainer div -->
<?php get_template_part( 'after_topcontainer' ); ?>

Yukarıdakiler, temanın kullanıcısının, alt tema klasörlerinde uygun şekilde adlandırılmış bir dosya oluşturarak ve aynı yöntemle önceden var olan her bölümden önce / sonra yeni kod ekleyerek mevcut kodun herhangi bir bölümünü değiştirmesine izin verir. parça dosyaları ana temada hiç mevcut değildir ve sadece kod eklemelerine izin vermek için vardır - ve bu yöntem, bunu gerçekleştirmek için kancaları / filtreleri anlamalarını gerektirmez.

Elbette aynı şeyi kancalar ve filtreler kullanarak da başardım.

Bunun yerine kanca / filtre kullanmanın bir avantajı var mı? Bunu kullanacak olan hedef kitlenin kesinlikle kod meraklısı olmadığını akılda tutarak . Onlara şablon yöntemini kullanmak için izleyebilecekleri nispeten temel bir talimat verebilirim, ancak şeytanı kancalarla karıştırırlar.

Yoksa aynı tema içinde birinin diğerinden daha iyi olacağı durumlar var mı?

Yanıtlar:


8

Kancaları tercih ederim, çünkü bunlar daha esnektir: Temanızın functions.phpdosyasından değil, aynı zamanda eklentilerden de kancalayabilirsiniz . Eklentilere çok fazla mantık koymaya çalışıyorum, böylece temalar çoğunlukla düzen şeyler içeriyor.

Bir eylem kancası kullanırsanız get_template_part() , o kanca işleyicisinde de kullanılabilir . Bu size her iki dünyanın en iyisini verir. Muhtemelen çağıran varsayılan bir kanca bile oluşturabilirsiniz get_template_part(), böylece kodlama konusunda fazla deneyime sahip olmayan kişiler ekstra dosya ekleyebilir ve diğerleri istemezlerse bu kancayı kaldırabilir.

İlgili performans: get_template_part()kullanımlar ( içindelocate_template() ) file_exists()bir, (Bu arama nasıl bağlı olarak) iki veya dört kez. file_exists()Çok hızlı görünüyor ve PHP'de ve hatta işletim sisteminde bile önbelleğe alma kullanıyor . Bu muhtemelen bir sorun değil.


Mantıklı. Tasarım itme gücümün bir kısmı, en yaygın kullanım durumlarında eklentilere olan ihtiyacı ortadan kaldırmak ve aynı zamanda bunları kullanmak isteyenler için kullanma yeteneğini korumaktı. Hedef müşterim WordPress veya eklentiler hakkında çok az şey biliyor, kötü eklentileri (IMO eklentilerinin büyük zayıflığı) anlatacak nitelikte değil ve birden fazla yazılım parçasını güncellemek ve yönetmekle uğraşmak istemiyor. Bu yüzden, istediklerini sunmak için temaların içine çok sayıda işlevsellik oluşturmak zorundayım: kullanımı basit, bakımı basit, tek noktadan çözüm.
Ashley G

4

Ana farkın okunabilirlik olduğunu söyleyebilirim. İyi adlandırılmış birkaç şablon parçası görürseniz, neler olduğunu kolayca kavrayabilirsiniz. Sadece bir kanca görürseniz, kancaya neyin bağlı olduğunu belirlemek için temanın geri kalanında arama yapmanız gerekecektir.


1
Evet, bu mantıklı ve örnek kodla elde etmeye çalıştığım şeyin bir parçası.
Ashley G

4

Alt temada kancadan işlevi kaldırmak (nispeten) kolaydır, ancak istenmeyen üst şablonu yok saymak çok daha zordur.

Esasen kancalarla çalışmak PHP tarafına daha yakındır ve şablonlarla çalışmak HTML tarafına daha yakındır. Çok kanca odaklı olan Hybrid ana temasını kullanıyorum. Bazı ebeveynlerin şablonundan kurtulmanız gerekene kadar bir mutluluktur.

Teknoloji meraklısı olmayan kullanıcılar için de çok güzel bir seçenek değil. Neden böyle bir tema içiyle uğraşmaları gerekiyor ki?

PS ayrıca performans sorunlarını da not eder. Kancalı şeyler bellekte olur, şablonlu şeyler bol miktarda disk araması yapar. Özellikle örneğinizdeki gibi bir şey yazıyorsanız.

PPS herkesin tercihi değil ... ama ana temayı sıfırdan yazmak yerine neden mevcut ana temayı almıyorsunuz ve kullanıcıya basit bir çocuk teması vermiyorsunuz?


Bir üst şablonu görmezden gelmek, onu değiştirmek için boş bir şablon dosyası oluşturmak kadar kolay olurdu. Teknoloji meraklısı olmayan kullanıcılar için kanca (ve bunun için PHP) ile uğraşmaktan çok daha kolay. Deneyim kancaları olan biri için çok daha kolay olsa da. Neden gelince, her zaman özelleştirmek isteyenler vardır, hatta bunu kabul ettiniz. Neden bir tema oluşturduğumla ilgili olarak, işimi devreye sokmak istediğim yön budur. Başka birinin işini kurmak benim için geleceğin kanıtı gibi görünmüyor, çünkü IMO'nun çoğu mevcut teması arzulanan çok şey bırakıyor. Sanırım daha iyisini yapabilirim.
Ashley G

Yine de performans sorunları hakkında iyi noktalar. Her ne kadar wordpress get_template_part ile çalışacak şekilde tasarlandığına göre, bu kadar yüksek bir performans hitinin olmayacağını düşünürdüm. Bu konuda herhangi bir kriter var mı?
Ashley G

Bir şablon parçasını görmezden gelmenin ne demek istediğini anlıyorum. Düşündüğüm kadar kolay değil
Ashley G

Aslında boş bir şablon dosyasını, klasörün kökünde olması koşuluyla, alt klasöre yerleştirmek kadar kolaydır. Zorlaştığı yer, şablon dosyalarının üst / alt tema klasörünün alt klasörlerinde bulunması
Ashley G

Aslında, alt klasörler bile sorun değil. Sadece yanlış adlı klasör vardı (çok geç LOL çalışıyorum emin bir işaret). Bir şablon parçasını geçersiz kılmak için alt öğede yalnızca üst öğede olduğu gibi aynı adda bir dosya gerekir
öğedeki
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.