WordPress Eklenti Geliştirme En İyi Uygulamaları: Şablon Dosyaları
WordPress'teki şablonlar hakkında konuştuğumuzda, normalde temadaki sayfa şablon dosyalarına atıfta bulunuruz. Bununla birlikte, içeriği görüntülemek için şablon dosyalarını kullanan eklentiler vardır ve bu, WordPress temaları oluşturma söz konusu olduğunda başka bir husus haline gelir.
Eklenti şablon dosyalarını geçersiz kılabilir misiniz? Öyleyse nasıl? HTML oluşturan bir eklenti oluşturuyorsanız, onu temalar tarafından kolayca değiştirilmesini nasıl sağlayabilirsiniz? Bu yazıda bu soruları cevaplayacağım.
Şablonlar Nelerdir?
WordPress şablonlama sistemi, WordPress mimarisinin en önemli sütunlarından biridir. Şablon dosyaları "HTML, Şablon Etiketleri ve PHP kodunun bir karışımını içeren PHP dosyalarıdır."
Şablon dosyaları, WordPress şablon hiyerarşisi tarafından yönetilen belirli bir şekilde yüklenir. Temada belirli şablon dosyaları aranır ve yoksa yedekler kullanılır. Örneğin, bir araba listeleme sitesi, özel bir 'araba' gönderi türü kaydetti. Bir kullanıcı belirli bir araba için sitedeki bir sayfayı ziyaret ettiğinde, WordPress temada single-car.php adlı bir şablon dosyası arar. Mevcut değilse, genel gönderileri görüntülemek için single.php şablonuna geri döner.
Bu şablonlara sahip olmak için bir tema gerekli değildir, ancak ne kadar fazla şablona sahip olursa, temanın farklı içeriğin nasıl görüntülendiği üzerinde o kadar ayrıntılı kontrolü vardır:
En kritik şablon dosyası, şablon hiyerarşisinde daha spesifik bir şablon bulunamazsa tümünü yakalama şablonu olan index.php'dir. Bir temanın yalnızca bir index.php şablonuna ihtiyacı olmasına rağmen, genellikle temalar, farklı içerik türlerini ve bağlamları görüntülemek için çok sayıda şablon içerir.
Eklenti Şablonları
Aynı şekilde, WordPress ve temalar şablon dosyalarını kullanır, eğer bir eklentinin HTML çıktısını ön uca vermesi gerekiyorsa, o zaman bir şablon dosyası kullanmak iyi bir fikirdir.
İşaretlemeyi kodunuzdan ayırmak iyi bir uygulamadır, böylece yalnızca HTML oluşturmak için çok sayıda print() ve printf() yapan işlevler yazmak zorunda kalmazsınız veya işlevlerin içinde büyük HTML blokları bulundurmazsınız.
Eklenti dosyalarınızı düzenlemenize yardımcı olur ve MVC mimarisinden oldukça uzak olmasına rağmen (bunun için bir WordPress çerçevesine ihtiyacınız olacaktır), 'görünüm' şablonlarınızın genişletilebileceği ve geçersiz kılınabileceği anlamına gelir. Eklenti dosyalarınızı düzenlemeden bırakırsanız, çıktıyı özelleştirilebilir hale getirmek için kodunuzu birçok do_action ve apply_filters karıştırırken bulacaksınız.
Tüm eklentilerin bunu yapması gerekmez, ancak e-ticaret veya üyelik eklentileri gibi siteye HTML çıktısı verenler, temanın bunları geçersiz kılmasına izin vermelidir.
Şablonları kullanan ve geliştiricilerin bunları geçersiz kılmasına izin veren birçok eklenti vardır. WooCommerce, Easy Digital Downloads ve WP User Manager (yakın zamanda edindiğim bir eklenti) bu özelliğe sahip ancak her biri bunu farklı bir şekilde uyguluyor. Gelin bunu nasıl yaptıklarına bir göz atalım.
Eklenti Şablonlarını Geçersiz Kılma
Bir eklenti, şablon özelleştirmesine izin veriyorsa, şablon dosyalarının eklentiden herhangi bir alt dizin yolunu koruyarak eklenti sümüklü böcek adıyla bir tema dizinine eklentiden kopyalanması gerektiğine dair genel bir kural vardır.
Örneğin, wp-content/woocommerce/templates/checkout/form-checkout.php , wp-content/theme/yourthemename/woocommerce/checkout/form-checkout.php dizinine kopyalanır, ardından kopyalanan dosyadaki HTML ve PHP gerektiği gibi ayarlandı.
Ancak, Easy Digital Downloads, tema kök dizininde EDD_Templates adlı bir dizinde özelleştirilmiş şablonlar arar. Bu ad edd_templates_dir filtresi kullanılarak değiştirilebilir olsa da:
add_filter( 'edd_templates_dir', function() { return 'easy-digital-downloads' } );
Başka bir eklentinin şablonlarını özelleştirmek istiyorsanız, şablon dosyalarının temanın neresine kopyalanması gerektiğini görmek için belgelerini kontrol etmek her zaman iyi bir fikirdir.
Kendi Eklentinizde Bir Şablon Hiyerarşisi Uygulamak
Her bir eklentinin, eklentinizde hangi yaklaşımı kullanacağınıza karar vermenize yardımcı olacak şablon yüklemeyi nasıl uyguladığına bir göz atalım.
WordPress Yolu
WooCommerce, şablonlarını yüklemek için wc_get_template_part işlevini kullanır, bu da yerel WordPress işlevini locate_template olarak çağırır. Sihir yapılan yer burasıdır. İşlev, şablon dosyasını üç konumda arar: alt tema (varsa), ana tema ve WordPress kökündeki wp-includes/theme-compat dizini. İşlev daha sonra bulunursa şablonu yükler.
Location_template boş çıkarsa, locate_template şablonun sürümünü yükler. İşlev, wc_get_template_part filtresini kullanarak şablonun değiştirilmesine izin verir, böylece diğer eklentiler de temel WooCommerce şablonlarını değiştirebilir.
Kendininkini yuvarla
Easy Digital Downloads benzer bir yaklaşım benimser, ancak tema dosyalarındaki şablonu bulmak için WordPress locate_template işlevini kullanmaz. Kendi edd_get_template_part , aranacak bir dizi dizini alan bir işlev yığınını çağırır. Bu aynı konumları içerir: alt tema, ana tema ve EDD'nin kendi eklenti şablon dizini. Yine, bu yollar edd_template_paths filtresi kullanılarak filtrelenebilir. İşlev, wp-includes/theme-compat dizinine bakmaz.
Şablon bulunduğunda, WordPress yerel işlevi load_template kullanılarak yüklenir; bu, locate_template kullandığı şeydir.

Üçüncü Taraf Kitaplığı
WP Kullanıcı Yöneticisi, şablonu yüklemek için kendi işlevini yazmak yerine, işi yapmak için Gamajo Template Loader kitaplığını kullanır.
WordPress'teki get_template_part() işlevi, yalnızca alt ve ana temaları kontrol eden find_template() işlevine dayandığından, hiçbir zaman eklentiler düşünülerek tasarlanmamıştır. Böylece, eklentideki şablonları kullanan son bir geri dönüş ekleyebiliriz, özel bir konum_şablon() işlevi ve özel bir get_template_part() işlevi kullanmamız gerekir. Buradaki çözüm, kolaylık sağlamak için onları bir sınıf olarak tamamlıyor.
Eklenti daha sonra Gamajo_Template_Loader sınıfını genişleten ve eklentiye özgü bazı değişkenleri ayarlayan bir sınıf oluşturarak kitaplığı uygular.
<?php class WPUM_Template_Loader extends Gamajo_Template_Loader { /** * Prefix for filter names. * * @var string */ protected $filter_prefix = 'wpum'; /** * Directory name where templates should be found into the theme. * * @var string */ protected $theme_template_directory = 'wpum'; /** * Current plugin's root directory. * * @var string */ protected $plugin_directory = WPUM_PLUGIN_DIR; /** * Directory name of where the templates are stored into the plugin. * * @var string */ protected $plugin_template_directory = 'templates'; }
Bu sınıf daha sonra somutlaştırılır ve eklenti koduna bir şablon yüklendiğinde kullanılır. Örneğin:
<?php $templates = new WPUM_Template_Loader(); $active_tab = wpum_get_active_profile_tab(); $data = array( 'user' => $user ); $templates->set_template_data( $data )->get_template_part( "profiles/{$active_tab}" );
Yukarıdaki örnekte, çağıran kodun şablona veri geçirmesini sağlamak için set_template_data yönteminin kullanımını görebilirsiniz. Bu, önceki uygulama tekniklerinin her ikisinde de bulunmayan güçlü bir özelliktir. $wp_query->query_vars dizisine daha sonra alt şablonda çağrılabilecek yeni bir öğe ayarlayarak verilerin şablona iletilmesine izin verir:
<?php $cover_image = get_user_meta( $data->user->ID, 'user_cover', true ); ?> <div> <div> <a href="<?php echo esc_url( wpum_get_profile_url( $data->user ) ); ?>"> <?php echo get_avatar( $data->user->ID, 128 ); ?> </a> </div> </div>
Diğer eklentiler, her yaptıklarında bu verileri manuel olarak $wp_query olarak ayarlamak zorunda kalacaklardı veya şablon dosyası içinde daha fazla işlev çağrısı yapmak zorunda kalabilirler.
Eklenti geliştiricileri olarak, kitaplıkları veya paketleri kullanmak, birden fazla eklentide aynı kodu tekrar tekrar yazmak zorunda olmadığımız anlamına gelir ve kitaplığı yazan, katkıda bulunan ve savaşta test eden diğer kişilerin uzmanlığından yararlanabiliriz. .
Bir WordPress eklentisinde PHP kitaplıkları kullanmanın bir dezavantajı vardır. Eklentinizin, başka bir eklenti tarafından yüklenen kitaplığın farklı bir sürümünü kullanmasıyla sonuçlanabilecek bağımlılık cehennemine düşebilirsiniz. WP Kullanıcı Yöneticisi, paketi güncellemeyi kolaylaştırmak için kitaplığı dahil etmek için Composer'ı kullanır. Ancak, henüz bağımlılık sorunlarından koruma sağlamadığı için, gelecekteki bir eklenti sürümünde Composer paketleriyle ilgili ad alanı sorunlarından kaçınmak için Pete'in kılavuzunu kullanacağım.
Ekstra Mil Gitmek
Bir eklenti şablon dosyalarında değişiklik yaparsa ve temanızın artık özelleştirdiğiniz eski bir sürümü varsa ne olur? Elbette, değişiklik HTML veya sınıf adlarında bazı zararsız değişiklikler olabilir, ancak genellikle işlevlerde kaçırmak istemediğiniz bir değişiklik olur.
Şablonlarda kritik değişiklikler eksik olabilir ve genellikle bunu yalnızca eklentiyi güncelledikten sonra sitenizi test ederken bir sorun görürseniz fark edersiniz. (Site sahipleri tarafından yapılan bir güncellemeden sonra tüm eklentiler aynı titiz testleri almaz.)
WooCommerce, bunu kullanıcılar için kritik bir sorun olarak belirlemiş ve buna karşı korunmak için bir sistem oluşturmuştur. Ayarlar > Durum sayfasının bir parçası olarak, hangi şablonların tema tarafından özelleştirildiğini ve ayrıca sürümün eski olup olmadığını ve bir güncellemeye ihtiyacı olup olmadığını gösterirler.

Bu, şablon dosyalarının her birinin dosya başlığında tema şablonlarıyla karşılaştırılabilecek bir sürüm numarasına sahip olması nedeniyle mümkün olur. Sürüm yalnızca şablonda bir değişiklik yapıldığında artırılır:
<?php /** * Checkout Form * * @author WooThemes * @package WooCommerce/Templates * @version 3.4.0 */
Benim düşünceme göre, bu tür bir işlevsellik çekirdekte bulunmalı veya en azından diğer eklentilerin kullanabileceği şekilde paketlenmelidir. Eklenti şablonlarında yapılan ve tema şablonlarında kopyalanmayan değişiklikler, sitede bozulmalara neden olabilir ve bu değişiklikler yakalanmazsa web siteleri, özellikle e-ticaret siteleri için ciddi sonuçlar doğurabilir.
Toplama
Umarım bu, şablon dosyalarını eklentilerin içine dahil etmenin en iyi uygulaması için yararlı bir rehber olmuştur, size onları nasıl özelleştireceğinizi ve aynı işlevselliği kendi eklentilerinizde nasıl oluşturacağınızı gösterir.
Geçersiz kılınabilecek şablonlara sahip eklentiler yazdınız mı? Hangi uygulama tekniğini kullandınız? Kaçırmış olabileceğim herhangi bir ipucu? Yorumlarda bize bildirin.
ev borcu WordPress sitesi