it-swarm-eu.dev

Nápověda Vytvoření vlastního typu příspěvku Slideshow s vlastními Meta boxy?

Potřebuji vytvořit vlastní příspěvek meta box (y) pro můj vlastní příspěvek typu "Slideshow" (tento typ příspěvku je již vytvořen). Každý metabox bude obsahovat obsah v každém snímku a uloží jej do odpovídajících polí. Každý metabox by měl obsahovat následující pole:

  • Název (textové pole)
  • Obrázek (buď textové pole pro img URL nebo ideálně rozevírací seznam zobrazující miniatury obrázků připojených k příspěvku)
  • Vložit kód (textová oblast)
  • Popis (wysiwyg)
  • Skrýt snímek (zaškrtávací políčko slouží k dočasnému skrytí snímku bez jeho odstranění)
  • Smazat snímek (tlačítko, které odstraní obsah polí meta příspěvků vyplněných tímto snímkem)

Chtěl bych také tlačítko někde, které mi umožňuje "Přidat snímek", takže když je kliknuto, přidává další "Slide" Vlastní Meta Box, který je duplikátem prvního, ale přidává přírůstkové číslo ke každému vlastnímu poli meta příspěvků. V současné době mám pouze 15 metaboxů a šablona prezentace je nastavena tak, že pokud je vyplněno pouze 5 z metaboxů, zobrazí se pouze 5 snímků.

Nakonec bych chtěl být schopen znovu objednat snímky, ať už pomocí funkce „Přetáhnout“ nebo jiným textovým polem, do kterého můžu zadat číslo objednávky.

Dostal jsem ho téměř tam, kde ho potřebuju s pluginem "More Fields" a nějakou kódovou nápovědou od Rarst. V pluginu „Další pole“ v každém metaboxu mám následující pole:

  • Název (textové pole)
  • Obrázek (rozevírací seznam obrázků připojených k příspěvku)
  • Vložit kód (textová oblast)
  • Popis (wysiwyg)
  • Skrýt snímek (zaškrtávací políčko slouží k dočasnému skrytí snímku bez jeho odstranění)

Zde je screenshot o tom, jak ho nastavuji pomocí pluginu „Další pole“:

alt text

Problém s tímto je, že neexistuje žádný způsob, jak odstranit snímek, jakmile je proveden, protože "Další pole" nepoužívá <?php delete_post_meta($post_id, $key, $value); ?> kdekoli. Další problém s plugin je, že je příliš nespolehlivý a přestávky často s aktualizacemi.

Byl jsem schopen implementovat podobné řešení s vlastními metaboxy, které zahrnují:

  • Název (textové pole)
  • Obrázek (textové pole pro img URL)
  • Vložit kód (textová oblast)
  • Popis (textová oblast)
  • Skrýt snímek (zaškrtávací políčko slouží k dočasnému skrytí snímku bez jeho odstranění)

S touto implementací se mi nezdá, že by bylo možné použít více polí TinyMCE nebo obrázek rozevíracího seznamu. Zdá se, že kód TinyMCE funguje, dokud nepřidám kód, který vytvoří přírůstkové kopie prvního metaboxu, na kterém místě dostanu tuto chybu přímo nad polem, kde by tlačítka TinyMCE měla být: Warning: array_Push() [function.array-Push]: First argument should be an array....

Také, právě teď jsem se spoléhají na své spisovatele, aby věděli, že vložit EITHER video nebo obrázek pro každý snímek, a to je v pořádku, ale to může být lepší mít přepínač, který jim umožní zvolit, který z nich je snímek (pravděpodobně výchozí pro obrázek), který je vázán na podmíněné zobrazení příkazu v šabloně prezentace.

Zpracovávám nahrané obrázky přes vestavěný rámeček "Featured Image" v postranním panelu, i když by mi nevadilo vlastní metabox, který jednoduše řekl "Upload Images" v horní části panelu pro zápis.

Nakonec hledám podobnou prezentaci, jakou je tato: http://www.nytimes.com/slideshow/2010/08/10/science/20100810angier-1.html . Chci, aby moje byla schopna mít místo snímku obrázek jako obsah na snímku. Potřebuji intuitivní a snadno použitelný Admin panel pro mé spisovatele (nejsou příliš tech důvtipný a není spolehlivý pomocí html a/nebo shortcodes). V případě, že to z příkladu není jasné, každý snímek by měl vytvořit nové zobrazení stránky.

Přeskupení Drag'n'Drop není prioritou, ale bylo by to v pohodě. Našel jsem plugin, který to zvládá opravdu dobře: SlideDeck . Bohužel plugin nevyhovuje mým potřebám, ale způsob, jakým manipulují s diapozitivy, je docela kluzký. Je to samostatný metabox v postranním panelu, který umožňuje přetáhnout snímky do pořadí, které se vám líbí. To je také to, jak přidávat snímky, kliknutím na tlačítko "Přidat snímek", který přidává další Slide Metabox do panelu pro zápis. Zde je snímek obrazovky:

alt text

Můžete také vidět více screenshoty z toho v akci v wordpress repository .

Zde je celý můj kód:

Funkce nastavení typu prezentace Slideshow a prezentace snímků: http://loak.Pastebin.com/g63Gf186

Původní kód z DeluxeBloggingTips.com (DBT), které jsem založil své Metaboxes z: http://loak.Pastebin.com/u9YTQrxf

Verze kódu DBT, kterou jsem změnila, aby mi poskytla přírůstkové verze stejné metabox: http://loak.Pastebin.com/WtxGdPrN

Upravená verze kódu DBT, který Chris Burbridge vytvořil, aby umožnil více instancí TinyMCE: http://loak.Pastebin.com/Mqb3pKhx _ ​​S tímto kódem TinyMCEs fungují.

Moje úprava kódu Burbridge, který se snaží zahrnout mé zvýšení a pole, které vám umožní vybrat obrázek z rozevíracího seznamu všech obrázků připojených k příspěvku: http://loak.Pastebin.com/xSuenJTK _ ​​V tomto pokusu je TinyMCE rozbit a rozevírací seznam nefunguje.

To asi nezáleží, ale jen v případě, že se zajímáte, zde je kód, který používám k vytáhnutí vloženého kódu z vlastního příspěvku meta, jeho velikost a vložení do příspěvku: http: //loak.Pastebin .com/n7pAzEAw

Toto je upravená verze původní otázky, která odráží aktuální stav projektu a odpovídá na otázky uvedené v komentářích. Díky Chris_O za uvedení odměny na to. Také díky Rarst a Justin za pomoc s mnoha z toho ve fóru ThemeHybrid.com . Strávil jsem na tom hodiny a hodiny a jsem uvízl (na této otázce jsem strávil pár hodin sám). Každá pomoc by byla velmi oceněna.

15
matt

Z pohledu věcí by nejbezpečnější sázkou a nejjednodušší cestou bylo rozbalit plugin More Fields speciálně pro vaše použití. Dva největší rysy, které vidím, že vaše vidlice potřebují jsou pole "továrna" a drag-and-drop rozhraní.

Více polí

Můj návrh by byl podívat se na třídu WordPress Widget a použít ji jako model pro vaši továrnu v terénu - v podstatě si půjčovat možnost vytvořit více instancí pole, jakmile na to budete mít vytvořený rámec.

Toto je jádro toho, jak více widgetů pracuje v postranním panelu:

  • Kód pro každý widget definujete jednou rozšířením třídy WP_Widget.
  • Potom můžete vytvořit tolik kopií widgetu, kolik chcete
    • Specifika každého widgetu jsou uložena jako serializovaná data v tabulce možností
  • Každý widget můžete přizpůsobit, odstranit pomocí jednoduchého příkazu delete a nastavit jejich umístění explicitně přes rozhraní Přetažení přetažení

Drag-and-drop

Ještě jednou, doporučuji se podívat na systém widgetů WordPress pro inspiraci. Už jsme tam měli poměrně intuitivní rozhraní drag-and-drop, takže by bylo poměrně snadné znovu použít stejný kód kdekoli jinde. Nebo, pokud chcete získat opravdu fantazie, můžete implementovat vlastní systém přetažení uvnitř samostatného vlastního pole meta.

Každý snímek by tedy byl definován vlastní meta box, který je propojen s příspěvkem. Pořadí snímků by bylo nastaveno samostatným vlastním meta boxem, který je také propojen s příspěvkem. Doporučuji odeslat aktualizace snímků prostřednictvím protokolu AJAX, abyste mohli dynamicky aktualizovat meta box pořadí snímků na základě těchto informací (to zabrání nutnosti ručně stisknout tlačítko „update“ a čekat, než se stránka znovu načte, než se přesunou kolem ).

jQuery UI má velké rozhraní " draggable ", které můžete snadno manipulovat pro vaše účely v rámci tohoto vlastního meta boxu. Těžká část není budování rozhraní, je to konzistentní, přesné komunikace mezi meta boxem a kolekcí meta boxů jinde na stránce.

Celkem

Z vašeho příspěvku jsem se dozvěděl, že máte poněkud funkční řešení:

  • Přidali jste 15 vlastních polí do vlastního typu příspěvku pomocí widgetu Další pole, ale chcete dynamicky přidat/odebrat pole, spíše než pracovat s nastaveným číslem
  • Chcete způsob, jak upravit pořadí těchto vlastních polí tak, aby se snímky načítaly v pořadí

Způsob, jakým bych k tomu přistupoval, spočívá v tom, aby byl proces vytváření meta vytvořen do třídy, kterou můžu znovu a znovu použít k vytvoření nových vlastních meta polí. Pak bych rozšířil třídu, abych inicializoval dva typy meta boxů: jeden pro diapozitivy, jeden pro snímek. Budu také stavět do meta boxu struktury snímků schopnost dynamicky vytvářet nové boxy meta snímků (meta boxy snímků by měly vlastní akci "delete").

Celá prezentace by nebyla uložena v meta boxech snímků, ale v meta boxu struktury snímků do vlastního pole meta pro příspěvek - vlastní meta by bylo zubaté pole, přičemž každý snímek by měl být reprezentován jako pole v něm - v pořadí . Přizpůsobení pořadí prezentace v meta boxu struktury by reorganizovalo pole a znovu uložilo meta pošty. Tímto způsobem mám pouze 1 meta hodnotu, abych si přečetl, když chci přístup k prezentaci.

Mezi SlideDeck, More Fields a vlastním kódem, který jste doposud sestavili, už máte většinu svého řešení v ruce ... stačí, když vše najednou pracuje společně. Zaměřil bych se na to, aby se implementace kořenů snížila nejdříve před přidáním ozdob JavaScriptu - dynamicky vytvářet, upravovat, ukládat a mazat snímky jsou důležitější než editor IMO. Nejdřív to udělejte. Poté si objednejte systém objednávání. Pak můžete se zaměřit na získávání více instancí TinyMCE na stránce.

6
EAMann

Našel jsem to, což je přesně to, co jste (já) hledáte -> http://pippinsplugins.com/drag-and-drop-order-for-plugin-options/

0
Ben Racicot