Özel Meta Kutularla Slayt Gösterisi Özel Gönderi Türü Oluşturmaya Yardım?


16

Benim özel yazı türü "Slayt gösterisi" (bu yazı türü zaten oluşturulmuş) için özel bir yazı meta kutusu (lar) oluşturmak gerekiyor. Her meta kutu içeriği her slayt slaydında tutar ve karşılık gelen özel alanlara kaydeder. Her meta kutu aşağıdaki alanları içermelidir:

  • Başlık (Metin Alanı)
  • Resim (img URL'si için bir Metin Alanı veya ideal olarak yayına ekli resimlerin küçük resimlerini gösteren bir Açılır Liste)
  • Gömme Kodu (Metin Alanı)
  • Açıklama (wysiwyg)
  • Slaytı Gizle (Slaytı silmeden geçici olarak gizlemek için kullanılacak onay kutusu)
  • Slaydı Sil (bu slayt tarafından doldurulan yayın meta alanlarının içeriğini silen düğme)

Ayrıca "slayt ekle" sağlayan bir yerde bir düğme istiyorum, bu yüzden tıklandığında, ilk bir kopyası olan ancak her özel yazı meta alanına artan bir sayı ekleyen başka bir "Slayt" Özel Meta Kutusu ekler. Şu anda sadece 15 meta kutum var ve Slayt Gösterisi şablonu metaboxların sadece 5'i doldurulursa sadece 5 slayt görüntülenecek şekilde ayarlanmıştır.

Son olarak, "Sürükle ve Bırak" veya sipariş numarasını yazabileceğim başka bir Metin Alanı ile slaytları yeniden sıralamak istiyorum.

Neredeyse "More Fields" eklentisi ve Rarst'ın bazı kod yardımı ile ihtiyaç duyduğum yere aldım . "Daha fazla alan" eklentisi ile her meta kutusunda aşağıdaki alanlar var:

  • Başlık (Metin Alanı)
  • Resim (Yayına ekli resimlerin açılır listesi)
  • Gömme Kodu (Metin Alanı)
  • Açıklama (wysiwyg)
  • Slaytı Gizle (Slaytı silmeden geçici olarak gizlemek için kullanılacak onay kutusu)

İşte "More Fields" eklentisi aracılığıyla nasıl kurulum var bir ekran görüntüsü:

alternatif metin

Buradaki sorun, "Daha Fazla Alan" <?php delete_post_meta($post_id, $key, $value); ?>hiçbir yerde kullanılmadığı için bir slayt silindikten sonra silinmenin bir yolu olmamasıdır . Eklentideki diğer sorun, çok güvenilmez olması ve güncellemelerle sık sık kesilmesidir.

Aşağıdakileri içeren kendi özel meta kutuları ile benzer bir çözüm uygulayabildim:

  • Başlık (Metin Alanı)
  • Resim (img URL'si için Metin Alanı)
  • Gömme Kodu (Metin Alanı)
  • Açıklama (Metin Alanı)
  • Slaytı Gizle (Slaytı silmeden geçici olarak gizlemek için kullanılacak onay kutusu)

Bu uygulama ile çalışmak için birden fazla TinyMCE alan veya görüntü açılır kutusunu elde edemiyorum. TinyMCE kodu ilk meta kutusunun artımlı kopyalarını oluşturan kodu ekleyene kadar çalışıyor gibi görünüyor Warning: array_push() [function.array-push]: First argument should be an array....

Ayrıca, şu anda yazarlarıma her slayt için bir video veya resim koymayı bilmek için güveniyorum ve sorun değil ama slaytın hangisi olduğunu seçmelerini sağlayan bir radyo düğmesine sahip olmak daha iyi olabilir (muhtemelen varsayılan resim), slayt gösterisi şablonundaki koşullu görüntüleme ifadesine bağlanır.

Yazma panelinin üst kısmındaki "Resimleri Yükle" diyen özel bir meta kutuyu önemsemesem de, resim yüklemelerini kenar çubuğundaki yerleşik "Öne Çıkan Resim" kutusu üzerinden yapıyorum.

Nihayetinde buna benzer bir slayt gösterisi arıyorum: http://www.nytimes.com/slideshow/2010/08/10/science/20100810angier-1.html . Benim de slaytta bir resim yerine içerik olarak bir videoya sahip olabilmeyi istiyorum. Yazarlarım için sezgisel ve kullanımı kolay bir Yönetici paneline ihtiyacım var (çok teknoloji meraklısı değil ve html ve / veya kısa kodlar kullanarak güvenilir değiller). Örnekten anlaşılamaması durumunda, her slayt yeni bir sayfa görüntüleme oluşturmalıdır.

Drag'n'Drop yeniden sıralaması yüksek bir öncelik değil, ama iyi olurdu. Bunu gerçekten iyi işleyen bir eklenti buldum: SlideDeck . Ne yazık ki eklenti benim ihtiyaçlarına uygun değil ama slaytların sipariş işleme şekli oldukça kaygan. Kenar çubuğundaki, slaytları istediğiniz sıraya sürüklemenizi sağlayan ayrı bir meta kutusudur. Yazma paneline başka bir Slayt Meta Kutusu ekleyen bir "Slayt Ekle" düğmesini tıklatarak slaytları bu şekilde ekleyebilirsiniz. İşte bir ekran görüntüsü:

alternatif metin

Ayrıca wordpress deposunda daha fazla ekran görüntüsünü de görebilirsiniz .

İşte tüm kodum:

Slayt Gösterisi Yazı Tipimi ve Slayt Gösterisi Sayfalandırmamı ayarlayan işlevler: http://loak.pastebin.com/g63Gf186

Meta Kutularımı temel aldığım DeluxeBloggingTips.com (DBT) orijinal kodu : http://loak.pastebin.com/u9YTQrxf

Aynı meta kutunun artımlı sürümlerini vermek için değiştirdiğim DBT kodunun sürümü: http://loak.pastebin.com/WtxGdPrN

Chris Burbridge'in TinyMCE'nin birden çok örneğine izin vermek için oluşturduğu DBT kodunun değiştirilmiş bir sürümü : http://loak.pastebin.com/Mqb3pKhx Bu kodla TinyMCE'ler çalışır.

Artışımı birleştirmeye çalışan Burbridge kodunda yaptığım değişiklik ve yayına eklenen tüm görüntülerin açılır listesinden görüntüyü seçmenize izin veren bir alan: http://loak.pastebin.com/xSuenJTK Bu denemede TinyMCE bozuldu ve açılır menü çalışmıyor.

Bu muhtemelen önemli değil, ancak merak ediyorsanız, burada gömme kodunu özel post meta'dan çekmek, yeniden boyutlandırmak ve yazıya eklemek için kullandığım kod: http://loak.pastebin.com / n7pAzEAw

Bu, orijinal sorunun projenin mevcut durumunu yansıtacak şekilde düzenlenmiş ve yorumlarda yayınlanan soruları cevaplayan bir sürümüdür. Bu ödülün için teşekkürler Chris_O . Ayrıca sayesinde Rarst ve Justin bu bir sürü bana yardım ettiğin için ThemeHybrid.com forumu . Bu saatler ve saatler geçirdim ve sıkışmış (Ben bu soruya yalnız birkaç saat geçirdim). Herhangi bir yardım büyük mutluluk duyacağız.


Kroki gibi tüm resmi gösteren bir simle görüntüsü çizebilir misiniz? Bunun ihtiyaçlarınızı daha iyi anlamanıza yardımcı olacağını düşünüyorum.
hakre

En alta bazı örnekler ekledim. Bu yeterince açık bir şey yapmazsa bana bildirin.
matt

Hala net değil mi?
matt

Kimse? Bu şey açık mı?
matt

@Hakre, orada mısın?
matt

Yanıtlar:


6

Görünüşe göre, en güvenli bahsiniz ve en kolay rotanız, özellikle Kullanımınız için Daha Fazla Alan eklentisini çatallamak olacaktır. Çatalınızın ihtiyacı olduğunu görebildiğim en büyük iki özellik bir alan "fabrikası" ve sürükle ve bırak arayüzüdür.

Birden Fazla Alan

Benim önerim, WordPress Widget sınıfına bakmak ve saha fabrikanız için bir model olarak kullanmak olacaktır - temel olarak, bunun için çerçeve oluşturduktan sonra bir alanın birden çok örneğini oluşturma yeteneğini ödünç almak.

Bu, kenar çubuğunda birden çok widget'ın nasıl çalıştığının temelidir:

  • WP_WidgetSınıfı genişleterek her widget için kodu bir kez tanımlarsınız .
  • Ardından, widget'ın istediğiniz kadar kopyasını oluşturabilirsiniz
    • Her widget'in özellikleri seçenekler tablosunda serileştirilmiş veriler olarak saklanır
  • Her widget'ı özelleştirebilir, basit bir deletekomutla kaldırabilir ve konumlarını Görünüm sürükleyip bırakma arayüzü aracılığıyla açıkça ayarlayabilirsiniz

Sürükle ve bırak

Bir kez daha, ilham almak için WordPress widget sistemine bakmanızı öneririm. Zaten orada ayarlanmış oldukça sezgisel bir sürükle ve bırak arabirimimiz var, bu nedenle aynı kodun çoğunu başka bir yerde yeniden amaçlamak oldukça kolay olurdu. Ya da, gerçekten süslü olmak istiyorsanız, kendi sürükle ve bırak sisteminizi ayrı bir özel meta alana uygulayabilirsiniz.

Böylece her slayt, gönderiye bağlı özel bir meta kutu ile tanımlanır. Slaytların sırası, gönderiye de bağlanan ayrı bir özel meta kutusuyla ayarlanır. Slayt siparişi meta kutusunu bilgiye dayalı olarak dinamik olarak güncelleyebilmeniz için slayt güncellemelerini göndermenizi öneririm (bu, "güncelleme" yi manuel olarak vurmak ve bir şeyleri hareket ettirmeden önce sayfanın yeniden yüklenmesini beklemek zorunda kalmaz).

jQuery UI, bu özel meta kutu içinde amaçlarınız için kolayca manipüle edebileceğiniz harika bir " sürüklenebilir " arayüze sahiptir. Zor kısım arayüzü oluşturmuyor, meta kutu ile sayfanın başka bir yerinde slayt meta kutularının toplanması arasında tutarlı ve doğru iletişim kuruyor.

Özetle

Gönderinizden topladığım şey, biraz uygulanabilir bir çözümünüz olması:

  • Diğer Alanlar widget'ı aracılığıyla özel yayın türünüze 15 özel alan eklediniz, ancak belirli bir sayı ile çalışmak yerine alanları dinamik olarak eklemek / kaldırmak istiyorsunuz
  • Slaytların sırayla yüklenmesi için bu özel alanların sırasını ayarlamanın bir yolunu istiyorsunuz

Buna yaklaşmamın yolu, yeni meta meta alanları oluşturmak için tekrar tekrar kullanabileceğim bir sınıfa özel meta oluşturma işlemini soyutlamaktır. Sonra iki tür meta kutu başlatmak için sınıfı genişletirim: biri slaytlar için, biri slayt yapısı için. Ayrıca slayt yapısı meta kutusuna dinamik olarak yeni slayt meta kutuları oluşturma yeteneği (slayt meta kutuları kendi "silme" eylem barındıracak) inşa ediyorum.

Slayt gösterisinin tamamı, slayt meta kutuları tarafından değil, slayt yapısı meta kutusuyla gönderi için özel bir meta alana depolanır; özel meta, her slaytın içinde diziler olarak temsil edilen tırtıklı bir dizi olur . sipariş . Yapı meta kutusundaki slayt gösterisinin sırasını özelleştirmek diziyi yeniden düzenler ve yayın metasını yeniden kaydeder. Bu şekilde, slayt gösterisine erişmek istediğimde okumak için yalnızca 1 meta değere sahibim.

SlideDeck, Daha Fazla Alan ve şimdiye kadar bir araya getirdiğiniz özel kod arasında, çözümünüzün çoğunu zaten elinizde bulunduruyorsunuz ... hepsini aynı anda birlikte çalıştırmanız gerekiyor. JavaScript süslemelerini eklemeden önce kök uygulamasını indirmeye odaklanacağım - slaytları dinamik olarak oluşturma, değiştirme, kaydetme ve silme, zengin bir metin editörü IMO'dan daha önemlidir. Önce bunu kır. Sonra sipariş sistemini indirin. Ardından , sayfada çalışan birden fazla TinyMCE örneği almaya odaklanabilirsiniz.


Yardım için teşekkürler! Şu anda bu benim beceri setimin biraz dışında ama öğrenme süreci boyunca iyi bir rehber görevi görecek. "Sınıflar" farkında ve zaten metabox kodu üzerinde bir sınıf kullandığınızı fark ama yine de onları anlamıyorum. "Farkında olduğum" ama tam olarak anlamadığım başka bir şey de dizilerin kullanılmasıdır.
matt

İlkeleri temelden aşağıya indirmeyle ilgili tavsiyeleriniz mantıklı, ancak bunu en kısa sürede üretim ortamına sokmamı gerektiren bazı gerçek dünya kısıtlamalarına karşıyım ve en önemli faktörlerden biri wysiwyg editörüdür çünkü yazarların çoğu çok teknik değildir . Projeyi aşamalı olarak yapmayı ve yol boyunca koltuk değneklerine güvenmeyi umursamıyorum, ancak bu yaklaşımın ölçeklenebilir olması gerekiyor. Bana "daha fazla alan" eklentisi kullanarak bunu anlayıncaya kadar geçici bir çözüm olarak hizmet edebileceğini söyledi ancak bununla çalışacağından emin değilim ...
matt

slayt gösterisinin tamamını tek bir özel alana kaydetme yaklaşımınız. Gerçekten hepsini bir alana koymanın daha iyi olduğunu düşünüyor musunuz? Bu cahil gelebilir, ancak bana, wp'nin küçük bir değişiklik yapıldığında tüm slayt gösterisini yeniden yazmak zorunda kalması durumunda hatalara çok daha fazla yer olduğu görülmektedir.
matt

Tüm şovu bir meta alana kaydetmek, sorunları önler ve tanıtır: Sizi, birden fazla alanı seçmeye, okumaya ve döngü oluşturmaya zorlayarak sunum sitesinde zaman tasarrufu sağlar. Ancak, bir slaytta bir şey kırılır ve DB'ye yazılırsa tüm slayt gösterisini kırar. Kesinlikle bir ödün, ama her zaman hız ve gelişme kolaylığı tercih ederim.
EAMann

Sitenin ön ucunda zaman kazandığını mı söylüyorsunuz? Neden tek seferde sadece bir slayt gösteriliyorsa?
matt

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.