Допоможіть створити спеціальний тип публікації слайд-шоу за допомогою спеціальних мета-ящиків?


16

Мені потрібно створити спеціальні мета-поля публікацій для мого користувальницького типу публікації "Слайд-шоу" (цей тип публікації вже створено). Кожне метабокс вміщатиме вміст у кожному слайді та зберігатиме його у відповідні спеціальні поля. Кожне метабокс має містити такі поля:

  • Заголовок (текстове поле)
  • Зображення (або текстове поле для URL-адреси зображення, або в ідеалі спадний список із мініатюрами зображень, прикріплених до публікації)
  • Вбудувати код (область тексту)
  • Опис (wysiwyg)
  • Сховати слайд (Поставити прапорець, щоб тимчасово приховати слайд, не видаляючи його)
  • Видалити слайд (кнопка, яка видаляє вміст метаполів публікації, які були заповнені цим слайдом)

Я також хотів би десь кнопку, яка дозволяє мені "Додати слайд", тому при натисканні на нього додається інша спеціальна мета поле "Слайд", яка є дублікатом першого, але додає додаткове число до кожного спеціального метаполя публікації. Наразі у мене є лише 15 метабокс, і шаблон слайд-шоу налаштований таким чином, що якщо заповнено лише 5 метабок, то відображається лише 5 слайдів.

Нарешті, я хотів би мати змогу повторно замовити слайди, будь то "Перетягування" чи іншим текстовим полем, у яке я можу набрати номер замовлення.

Я отримав його майже там, де мені це потрібно, завдяки плагіну "Більше полів" та деякій допомозі з коду від Rarst. З плагіном "Більше полів" у кожному метабоксі є наступні поля:

  • Заголовок (текстове поле)
  • Зображення (спадний список зображень, доданих до публікації)
  • Вбудувати код (область тексту)
  • Опис (wysiwyg)
  • Сховати слайд (Поставити прапорець, щоб тимчасово приховати слайд, не видаляючи його)

Ось скріншот того, як я налаштував його через плагін "More Fields":

alt текст

Проблема з цим полягає в тому, що немає можливості видалити слайд після його створення, оскільки "Більше полів" ніде не використовується <?php delete_post_meta($post_id, $key, $value); ?>. Інша проблема плагіна полягає в тому, що він занадто ненадійний і часто зривається з оновленнями.

Мені вдалося реалізувати подібне рішення зі своїми власними метабоксами, що включає:

  • Заголовок (текстове поле)
  • Зображення (текстове поле для URL-адреси зображення)
  • Вбудувати код (область тексту)
  • Опис (область тексту)
  • Сховати слайд (Поставити прапорець, щоб тимчасово приховати слайд, не видаляючи його)

З цією реалізацією я не можу привести в дію кілька полів TinyMCE або спадне вікно зображення. Код TinyMCE здається працювати , поки я не додати код, створювати інкрементні копії першого METABOX в цей момент я отримую це право помилки над полем , де кнопки TinyMCE повинні бути: Warning: array_push() [function.array-push]: First argument should be an array....

Крім того, зараз я покладаюся на своїх авторів, щоб вони знали, щоб розмістити в EITHER відео чи зображення для кожного слайда, і це нормально, але, можливо, краще мати перемикач, який дозволяє їм вибрати, який слайд - це, можливо, за замовчуванням зображення), яке прив'язується до умовного оператора відображення у шаблоні слайд-шоу.

Я обробляю завантаження зображень за допомогою вбудованого вікна "Пропоноване зображення" на бічній панелі, хоча я б не заперечував проти спеціального метабоксу, який просто сказав "Завантажити зображення" у верхній частині панелі запису.

Зрештою, я шукаю слайд-шоу, подібне до цього: http://www.nytimes.com/slideshow/2010/08/10/science/20100810angier-1.html . Я хочу, щоб мій також міг мати відео як вміст слайда замість зображення. Мені потрібна інтуїтивна та зручна у використанні панель адміністратора для моїх авторів (вони не дуже підковані та не надійні за допомогою html та / або шорт-кодів). На випадок, якщо це не зрозуміло з прикладу, кожен слайд повинен генерувати новий перегляд сторінки.

Упорядкування Drag'n'Drop не є пріоритетним, але це було б круто. Я знайшов плагін, який справді добре справляється з цим: SlideDeck . На жаль, плагін не відповідає моїм потребам, але те, як вони обробляють впорядкування слайдів, досить гладке. Це окремий метабокс на бічній панелі, який дозволяє перетягувати слайди навколо в порядку, який вам подобається. Це також спосіб додавання слайдів, натиснувши кнопку "Додати слайд", яка додає ще один метабокс слайдів на панель запису. Ось скріншот:

alt текст

Ви також можете побачити більше скріншотів цього дій у сховищі Wordpress .

Ось весь мій код:

Функції, що налаштовують мій тип публікації слайд-шоу та пагін сторінки слайд-шоу: http://loak.pastebin.com/g63Gf186

Оригінальний код від DeluxeBloggingTips.com (DBT), на якому я базував свої метабокси: http://loak.pastebin.com/u9YTQrxf

Версія коду DBT, яку я змінив, дає мені додаткові версії того ж метабокса: http://loak.pastebin.com/WtxGdPrN

Змінена версія коду DBT, яку створив Кріс Бербрідж, щоб дозволити кілька екземплярів TinyMCE: http://loak.pastebin.com/Mqb3pKhx З цим кодом TinyMCE працюють.

Моя модифікація коду Бербріджа, що намагається включити мою інкрементацію, і поле, яке дозволяє вибрати зображення зі спадного списку всіх зображень, доданих до публікації: http://loak.pastebin.com/xSuenJTK У цій спробі TinyMCE порушено, і випадаюче не працює.

Це, мабуть, не має значення, але про всяк випадок, коли вам цікаво, ось код, який я використовую для витягування коду з вбудованого мета мета користування, змінення його розміру та вставки у публікацію: http://loak.pastebin.com / n7pAzEAw

Це відредагована версія оригінального питання, яка відображає поточний стан проекту та відповідає на питання, розміщені в коментарях. Дякуємо Chris_O за те, що він поставив цю суму . Крім того, дякую Рарсту та Джастіну за те, що вони мені допомогли багато чого на форумі ThemeHybrid.com . Я витратив на це години і години і я застряг (я пару годин провів один на це питання). Будь-яка допомога буде дуже вдячна.


Чи можете ви намалювати іміджеве зображення, яке показує всю картину, як ескіз чи так? Я думаю, що це корисно, щоб краще зрозуміти ваші потреби.
хакре

Я додав кілька прикладів донизу. Якщо це не достатньо зрозуміло, повідомте мене.
матовий

Це все ще незрозуміло?
матовий

Хтось? Це справа?
матовий

@Hakre, ти там?
матовий

Відповіді:


6

З огляду на речі, вашим найбезпечнішим ставкою і найпростішим маршрутом буде роздрібнення плагіна More Fields спеціально для вашого використання. Дві найбільші особливості, за якими я можу побачити вашу вилку, - це "фабрика" поля та інтерфейс перетягування.

Кілька полів

Моя пропозиція полягала б у тому, щоб переглянути клас WordPress Widget і використати його як модель для свого фабричного поля - в основному, запозичити можливість створювати кілька екземплярів поля, як тільки для вас буде побудована рамка.

Це суть способу роботи декількох віджетів на бічній панелі:

  • Ви визначаєте код для кожного віджета один раз, розширюючи WP_Widgetклас.
  • Потім ви можете створити стільки копій віджета, скільки вам потрібно
    • Специфікація кожного віджета зберігається як серіалізовані дані в таблиці параметрів
  • Ви можете налаштувати кожен віджет, видалити їх за допомогою простої deleteкоманди та встановити їх позиціонування чітко через інтерфейс перетягування зовнішнього вигляду

Перетягнути і кинути

Ще раз пропоную переглянути натхнення у системі віджетів WordPress. У нас уже створений досить інтуїтивний інтерфейс перетягування, тому було б досить легко повторно призначити більшу частину того ж коду в іншому місці. Або, якщо ви хочете по-справжньому фантазувати, ви можете впровадити власну систему перетягування в окреме спеціальне мета-поле.

Таким чином, кожен слайд визначатиметься спеціальним мета-вікном, пов’язаним із публікацією. Порядок слайдів встановлюється окремим спеціальним мета-вікном, який також пов'язаний з публікацією. Я рекомендую надсилати оновлення слайдів через AJAX, щоб ви могли динамічно оновлювати метапоказ замовлення слайдів на основі інформації (це запобігає необхідності вручну натискати "оновлення" та чекати, коли сторінка перезавантажиться, перш ніж переміщувати речі).

Користувальницький інтерфейс jQuery має чудовий " перетягується " інтерфейс, яким ви можете легко маніпулювати для своїх цілей у цій спеціальній мета-коробці. Важка частина не будує інтерфейс, він отримує послідовну, точну комунікацію між мета-вікном і колекцією слайд-мета-вікон в інших місцях сторінки.

Підсумки

Що я зібрав з вашої посади, це те, що у вас є дещо дієве рішення:

  • Ви додали 15 спеціальних полів до свого власного типу публікації за допомогою віджета «Додаткові поля», але хочете динамічно додавати / видаляти поля, а не працювати з заданим номером
  • Ви хочете, щоб відрегулювати порядок цих спеціальних полів так, щоб слайди завантажували по порядку

Я підходжу до цього, щоб абстрагувати процес створення мета для користування класом, який я можу використовувати знову і знову для створення нових спеціальних метаполів. Тоді я б розширив клас, щоб ініціалізувати два типи метабокс: один для слайдів, один для структури слайдів. Я б також вбудував у мета-поле структури слайда можливість динамічно створювати нові мета-поля слайдів (мета-поля слайдів міститимуть власну дію "видалення").

Весь слайд-шоу зберігатиметься не за мета-полями слайдів, а за мета-полем структури слайдів у користувацьке мета-поле для публікації - користувацький мета буде нерівним масивом, кожен з слайдів представлений як масиви всередині нього - в замовлення . Налаштування порядку слайд-шоу в мета-вікні структури дозволить реорганізувати масив і відновити збереження мета-повідомлення. Таким чином, у мене є лише мета-значення для зчитування, коли я хочу отримати доступ до слайд-шоу.

Між SlideDeck, More Fields та спеціальним кодом, який ви склали до цього часу, ви вже отримали більшу частину свого рішення ... Вам просто потрібно, щоб все працювали разом одночасно. Я б сфокусувався на тому, щоб спочатку застосувати кореневу реалізацію, перш ніж додавати прикраси JavaScript - динамічне створення, модифікація, збереження та видалення слайдів важливіше, ніж багатий текстовий редактор IMO. Перш за все це виламати. Потім опустіть систему замовлення. Тоді ви можете зосередитись на отриманні декількох примірників роботи TinyMCE на сторінці.


Дякую за допомогу! На даний момент це трохи не в моєму наборі навичок, але послужить хорошим посібником у процесі навчання. Я знаю про "класи" і розумію, що вже використовую клас на метабокси, але все ще не розумію їх. Ще одна річ, яку я «знаю», але не повністю розумію, це використання масивів.
мат

Ваша порада щодо зниження основ спочатку має сенс, але я проти деяких реальних обмежень, які вимагають від мене цього часу перейти до виробничого середовища, і одним із найважливіших факторів є редактор wysiwyg, оскільки багато хто з авторів дуже нетехнічні . Я не проти робити проект поступовим і покладатися на милиці по дорозі, але цей підхід, очевидно, повинен бути масштабованим. Це означає, що мені здається, що використання плагіна "більше полів" може служити тимчасовим рішенням, поки я не з'ясую це, однак я не впевнений, що буде працювати з ...
мат,

ваш підхід збереження всього слайд-шоу в одному спеціальному полі. Ви справді думаєте, що краще все це в одному полі? Це може здатися невідомим, але мені здається, що там набагато більше місця для помилок, якщо wp доведеться переписувати все слайд-шоу щоразу, коли робиться незначна зміна.
мат

Збереження всього шоу в одне мета-поле і запобігає, і створює проблеми: Це економить час на веб-сайті презентації, не змушуючи вас вибирати, читати та перебирати через декілька полів. Однак якщо щось перерветься в одному слайді і записується в БД, воно розбиває все слайд-шоу. Безумовно, компроміс, але я завжди вибираю швидкість і простоту розвитку.
EAMann

Ви хочете сказати, що це економить час на передньому кінці сайту? Чому це було б, якщо він показує лише один слайд одночасно?
мат

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.