Eklenti Verilerini Temalarla Entegre Etme Yöntemleri


17

Tema entegrasyonu sağlayan WordPress eklentileri geliştirmeye yönelik en iyi uygulamalar hakkında bazı görüşler almak istiyorum.

Bu soruyu sorduğumda anlam ifade etmek için, merak ettiğim bir senaryo için varsayımsal bir örnekle başlayayım. "Discography" adlı bir eklenti oluşturduğumu düşünün. Diskografi üç özel gönderi türü kaydeder: "Gruplar", "Albümler" ve "Parçalar". Eklenti ayrıca her yazı türü için ayrıntılar sağlayan meta kutular ve her yazı türünü düzenlemek için özel sınıflandırmalar sağlar. Bu yazı türleri, Mesajlar 2 Mesajlar eklentisi ile birlikte bağlanmıştır . Yönetici içinde, kullanıcı albümlerle ilişkilendirilebilen yeni bantlar ekleyebilir, bunlar da parçalarla ilişkilendirilir ve bunların tümü meta kutular ve sınıflandırmalarla kendilerine eklenmiş çok sayıda başka veriye sahip olur.

Şimdi, bu eklentinin kullanıcıların bu bilgileri girmesi için bir yönetici oluşturmasını istemiyorum; Veriler için bazı varsayılan görüntüler sağlamak istiyorum. Daha gelişmiş bir kullanıcı / geliştirici sadece bu yöneticiye sahip olmakta fayda vardır. Bu verileri alıp temada kullanması onun için yeterince kolay olurdu; ancak, bazı varsayılan görünümler olmadan, bu eklenti çoğu kullanıcı için işe yaramaz. Bu örnek için aşağıdakileri görüntüleyebilirsiniz (parantezler, bilgilerin şablon hiyerarşisine göre görüntülenme yollarını gösterir):

  • Bantlar (single-prefix-band.php, single.php, index.php, kısa kod)
  • Albümler (single-prefix-album.php, single.php, index.php, kısa kod)
  • İzler (single-prefix-track.php, single.php, index.php, kısa kod)
  • Bant Listesi (şablon-bant-list.php, sayfa-bant-listeleme.php, sayfa- {id} .php, sayfa.php, index.php, kısa kod)
  • Albüm Listeleme (şablon-albüm-list.php, sayfa-albüm-listeleme.php, sayfa- {id} .php, sayfa.php, index.php, kısa kod)
  • Albüm Zaman Çizelgesi (template-album-timeline.php, page-album-timeline.php, page- {id} .php, page.php, index.php, kısa kod)

Varsayılan şablon dosyaları, yazı türlerinin her biri için gereken tüm bilgileri görüntülemeyeceğinden, bu yazı türleri için bazı varsayılan sunumların olması önemlidir. Örneğin, Twenty Eleven teması varsayılan olarak bir albümün adını, kategorilerini, açıklamasını ve yayınlanma tarihini gösterir. Bir albüm için pek kullanışlı değil. Ben bant, çıkış tarihi, plak şirketi, albüm sürümleri, parça, vb çeker tek bir yazı şablonu sağlamak istiyorum. Bir eklenti geliştiricisi olarak bunu sağlamak için önemli olacağını hissediyorum. Şablonun her tema için işe yaramayacağını biliyorum, ancak kullanıcının temasıyla daha da entegre olabilecek bazı varsayılanlar olmalı.

Yine, bu durumu ele almanın en iyi yolunun ne olduğunu merak ediyorum? Bence aşağıdakilerden herhangi birini yapabilirsiniz.

Kısa kodlar

Kısa kodlar, geliştiricilerin sitenin herhangi bir yerine bant, albüm, parça, grup listesi vb. Eklemelerine izin vermek için çok esnek ve kullanıcı dostu bir yol olarak kullanılabilir. Belirli sayfalarda bantlar oluşturmak veya her bant için ayrı sayfalar oluşturmak yararlı olacaktır (çok verimli değil, ancak bazı kullanıcılar işlere bu şekilde yaklaşıyor). Kısa kod, istenen verilerin güzel bir varsayılan görünümünü sağlayacak olan sağlanan bir CSS dosyasına bağlı olan HTML oluşturur. Her şey eklenti dosyalarında bulunacaktı ve tema ile hiçbir şey yapılması gerekmeyecekti.

Şablon Dosyaları

Eklenti, şablon dosyalarıyla birlikte de gönderilebilir. Şablon dosyaları güzel bir varsayılan görünüm için işaretlenebilir ve stillendirilebilir. Yazı türleri görüntülendiğinde temanın doğru şablonları bulabilmesi için kullanıcılarınızın dosyaları tema klasörüne taşıması için talimatlar verebilirsiniz. Hatta kullanıcının dosyaları tek bir tıklama ile taşımasına izin vermek için bir arayüz sağlamak kadar ileri gidebilir (not: Kullanıcının tema klasöründe aktivasyon sırasında dosyaları oluşturmayacağım çünkü temasını dosya başlatmadan kötülük yapmadan kötülük yapıyorum) .

Ayrıca, bu dosyaları eklenti klasöründen çıkarmadan kullanmak ve her şeyi kendi içinde tutmak için filtreleri de kullanabilirsiniz. Bu amaçla kullanılan "template_include" ve "{$ type} _template" filtrelerini gördüm. Aslında, temalar klasöründeki şablonları kullanabilir ve yoksa, varsayılan görünümleri sağlamak için bu filtrelere geri dönebilirsiniz.

Soru

Sunulan fikirler herhangi bir şekilde sorunluysa ve dahil etmediğim alternatifler varsa, başkalarının bu durumlar için en iyi uygulamalar olduğunu düşündüklerini bilmek isterim.

Teşekkür ederim!


3
WPSE sadece tüm sorular çok iyi ... :) düşünülmüş olurduk
scribu

@scribu ... sadece diyorsun çünkü eklentinize bir bağlantı ekledim;) Ciddi olsa da, iltifat için teşekkürler. Bunun aptalca bir soru olacağından endişeliydim, ama bu beni bir süredir rahatsız ediyor.
tollmanz

Benden bir +1 daha. "Neden" için @scribu açıklamasını okuyun.
kaiser

@kaiser & scribu ... Umarım ikiniz de bu konuyla ilgili düşüncelerinizi verirsiniz. Söylediklerini duymak isterim.
tollmanz

@tollmanz Zaten yapıldı. Ancak bu kadar yoğun bir Q'nun biraz düşünmeye ve zamana ihtiyacı var.
kaiser

Yanıtlar:


4

Q'nun okunması şu ana kadar yeterli zaman aldığından, sorduğunuz her Q'ya cevap veremiyorum;), ancak ücretsiz, açık kaynak eklentileri geliştirmeyle ilgili kişisel deneyimim hakkında bazı bilgiler vermeye çalışıyorum.

1. Asla çok fazla şey yapmayın. Özellikler her eklentinin ölümüdür. Önce temel bir sürüm oluşturun ve kullanıcılarınızın tepkisini test edin. Eklentiniz çok dikkat çekiyorsa, en çok istenen özellikleri entegre edebilirsiniz.

2. Her kullanım kutusunu doldurmaktan kaçının. Eklentinizi korumanız gerekiyor. WP her üç ayda bir yeni bir sürüm sunuyor. Ve bazen tüm eklentilerinizi takip etmek zor. Örnek vermek için: Ayarlar API'sının yeni bir sürümü şu anda Trac'ta tartışılıyor. Bu bittiğinde, birçok eklenti veya tema geliştiricisinin kodun büyük bir bölümünü değiştirmesi ve bazı insanlar - benim gibi - API'nın üzerinde bir soyutlama katmanı bile yazmış olma şansı vardır. Bu yüzden geri dönmeniz, temel / soyutlama katmanınızı yeniden yazmanız ve ardından bunun parçalarını çağıran her şeyi yeniden işlemeniz gerekir. Söz veriyorum bu çok iş. Ve hatta kodunuza sıkı sıkıya bağlıysa. Çok sayıda kullanım vakasını doldurmaya başladığınızda, izlemeniz gereken çok sayıda WP çekirdek kodu evrimine sahip olmanın yanı sıra kodunuzu güncel tutmak için çok fazla işiniz var.

3. Hiçbir zaman eklentilerinize veya temalarınıza çok fazla kod örneği (veya şablon) eklemeyi denemeyin. Geliştiricileri ve son kullanıcıları hedeflemek istiyorsanız : Dokümantasyon için blogunuzu kullanın. Geliştiriciler böyle şeylerden nefret eder ve son kullanıcılar asla tatmin olmazlar (bkz: her kullanım durumunu doldurma).

4. Kodunuzu akıllıca tek dosyalara bölün. Temel kural: Bir parça için bir dosya. Örnek: styles.php, scripts.php, taxonomies.php, cpts.php, vb. Her şeyi bir "anne" (fabrika) sınıfından yükleyin ve dosyalarınızı "takılabilir" tutun. Bir şeyleri yeniden yazmanız gerekirse, kolayca bulacaksınız. Devs bir şey arıyorsa: kolayca bulabilirler. Çok sayıda iyi adlandırılmış dosya size zarar vermiyor.

5. Temel stiller (sınıflar) listeniz varsa , kullanıcıya bırakın . Şanslar çok yüksek, tema veya diğer eklentilerden gelen stiller tanımlarınızı kesecek (ne kadar belirti seçerseniz seçin). Mümkün olduğunca az metinle bir yerde açıklamaya çalışın.

6. Eklentinizi seviyorum. Ama sıkılıyorsan bırak. :)


Şimdi - kısaca - eklenti fikriniz hakkında ayrıntılı bir şey:

A. Şablon dosyaları bozuk. Söylediğim gibi: Blogunuzda dokümante edin, orada örnek işaretleme ve stiller sunun. Blogunuz kazanç sağlar (ve reklamlarınız varsa siz de).

B. Kısa kodlar kool'dur. Eklenti gittiğinde (çoğu durumda) kimseye zarar vermezler ve daha sonra TinyMCE düğmelerine (insanların sevdiği) genişletilebilir / geliştirilebilirler.

C. Eklentinizin başka bir eklentiye ihtiyacı olduğunu açıkça belirtin. Bunu sorgulayın ve diğer eklenti çıkmazsa (bu durumda bağlayın) veya etkinleştirilmemişse (bunu etkinleştirme sırasında kullanıcı için yapabilirsiniz) admin_notices'e (register_activation_hook aracılığıyla) bir not ekleyin. Ayrıca bu eklentinin güvenilir bir kaynaktan geldiğini ve önümüzdeki yıllarda da korunacağını unutmayın.

Not: Yazdığım hiçbir şey benim kişisel düşüncelerimden başka bir şey değil, bu da benim deneyimimi yansıtıyor.


1
TinyMCE (veya diğer) kısa kod düğmeleri için +1, bu teknik teknoloji meraklısı olmayan kullanıcılar için çok yararlıdır ve tüm tema entegrasyonu şeyine yardımcı olur.
Wyck

1
Düşünceleriniz için teşekkürler. Burada çok sayıda genel eklenti bilgeliği var. Sorumla ilgili olarak, yönteminizin tema entegrasyonu açısından çok az vermek olduğu anlaşılıyor; bunun yerine kullanıcının dokümantasyon yoluyla çözmesini istersiniz. Bunun neden makul bir yöntem olduğunu anlayabiliyorum, ancak aynı zamanda, böyle bir dosya eklentide bir şey eksikmiş gibi hissettiren birçok kullanıcıya yol açacağım. Örneğimde, grupların / albümlerin / parçaların görüntülenmesi için destek olmasaydı, kullanıcıların bir şeylerin kırıldığını düşünürüm.
tollmanz

Yapışmak istiyorsanız, gerçekten bir cpt'e (veya başka bir yere) işaretleme eklemek için bir kısa kod kullanmanızı öneririm. Stillerle ilgili olarak: Çocuk> ana tema klasöründe bir yerde belirli bir stil sayfasının olup olmadığını kontrol ederdim. Evet ise: Çekirdek stil sayfasını sessizce geçersiz kılar / yönetir. Bu şekilde, her iki geliştiriciyi de son kullanıcı olarak tatmin edebilirsiniz.
kaiser

@kaiser ... her ikisi de sağlam noktalar.
tollmanz

2

Bazı açılardan, bir eklenti veya tema oluşturma arasındaki dengeyi tartmanız gerekir, senaryonuz çok fazla özelleştirme / özellik gerektiriyorsa, bunun yerine tema oluşturmak her zaman daha iyidir. Bu şekilde kullanıcı daha sonra her zaman daha kolay bir görünüm açısından özelleştirebilir, daha sonra kullanıcının işlevselliği özelleştirmesini sağlar (her yerde kısa kodlar sıkıştırarak), daha fazla özellik kontrolüne sahip olursunuz, diğer eklentilerle çalışır vb.

Piyasadaki tüm temalarla yoğun bir şekilde bütünleşmeye çalışan bir eklenti sizin için çok fazla soruna ve dürüst bir şekilde çalışmaya neden olacaktır.

Örneğin, müzik ve diskografi yönetimine dayalı çok entegre bir eklenti oluşturmak yerine, bu amaç için bir tema oluşturmak yerine, bu, özel çalışma gerektiren niş pazarlar için daha popüler hale geliyor. Gerçek bir dünya örneği, gayrimenkul tabanlı bir tema olurdu, bunun için bir eklenti kullanmamın bir yolu yoktur, çünkü bu kadar derin bir özellik kümesine sahiptir, bunun yerine sıfırdan bir tema olarak yaratılmıştır, çünkü temalar yararlanabilmektedir. eklentilerin tüm özellikleri nasıl olsa.

Pazarlama perspektifinden bakıldığında, bir niş temanın ön uç özelliklerini dengelerken bir eklentiden daha iyi olacağı da muhtemeldir.


Bunu bir eklenti olarak kavramsallaştırmanın iyi bir noktası (özellikle pazarlama yararları için). Bununla ilgili en büyük sorun, bir eklentinin ve verilerin tüm temaya yol açması gerektiği her zaman böyle olmamasıdır. Maalesef temaya ihtiyaç duyan bir sitenin daha küçük bir bileşeni olabilir. Bununla birlikte, daha geniş bir noktaya geliyorum, tüm kullanıcı gruplarını tatmin etmek mümkün değil ve sadece bir grubu hedeflemek daha iyi.
tollmanz

2

Sanal sayfalar

Gördüğüm üçüncü bir teknik, eklentiniz için yer tutucu olarak özel bir sayfa atamak ve çıktı almak için ne gerekiyorsa çıktı almak için 'the_content' filtresini kullanmaktı.

Bu şekilde, üstbilgiler, kenar çubukları, altbilgiler ve sarmalayıcı div'larıyla uğraşmanıza gerek olmadığından tema yapısı ile uyumlu şablonlar oluşturabilirsiniz.

Bunun harika bir örneği bbPress eklentisinde bulunabilir:

http://bbpress.trac.wordpress.org/browser/branches/plugin/bbp-includes/bbp-core-compatibility.php?rev=3434#L931


Kod örneği önerir misiniz? Sanırım bu bir sürü eklenti dev.s görmek isterim. (1).
kaiser

Bir örnek için yeni bbPress eklentisine bakabilirsiniz.
scribu

Bu çok ilginç. Yargıyı geçmeden önce koda bakmam gerekecek.
tollmanz

@scribu: Bir bağlantı eklemek için onu arıyordum, ancak plugins.svn aracılığıyla bulamıyorum. Daha sonraki okuyucular için lütfen bir bağlantı gönderebilir misiniz? Teşekkürler.
kaiser

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.