InPost Gallery
Плагін для WordPress, що прикріплює набір зображень до будь-якого запису й показує його через скрипти галерей і слайдерів, кероване шорткодами.
- Перший реліз
- Активні встановлення
- 700+
- Рейтинг
- Читати відгуки
Про мене
InPost Gallery зберігає список зображень у мета-даних запису будь-якого ввімкненого типу записів і виводить його через шорткоди. Кожен шорткод обгортає один фронтенд-скрипт (YoxView, Fancybox, Galleria, Nivo Slider, Camera), а шостий шорткод розміщує одне зображення.
Основна частина інженерної роботи — у редакторі. У класичному редакторі (TinyMCE) шорткоди з'являються як заповнювачі, на які можна клацнути, а подвійний клік відкриває форму, вже заповнену поточними атрибутами шорткоду. Інтеграції з блоковим редактором у плагіна немає. Сам список зображень — це мета-бокс на екрані редагування запису. Плагін заявляє підтримку з WordPress 3.5 і протестований до 6.9, а цей діапазон охоплює зміну API TinyMCE у WordPress 3.9.
На фронтенді мініатюри нарізаються до потрібного розміру при першому використанні та кешуються поруч з оригінальним файлом. Уся галерея може згортатися в одне зображення-обкладинку, що завантажує галерею у спливне вікно через AJAX, і це дозволяє розмістити велику галерею у віджеті бічної панелі.
InPost Gallery · галереї в записах
що розв'язано
Візуальний редактор шорткодів
у продуктіЩо це даєРедактори змінюють галереї через форму в редакторі запису замість ручного редагування кодів, а отже сторінки ламаються рідше.
- Проблема
- Шорткоди з багатьма атрибутами важко редагувати вручну у вмісті запису. Класичний редактор (TinyMCE) мав показувати їх як об'єкти, відкривати форму з їхніми поточними значеннями й записувати їх назад, не пошкоджуючи запис.
- Рішення
Плагін TinyMCE під час завантаження замінює шорткоди зображеннями-заповнювачами, а під час збереження повертає їх у текст. Форма редагування рендериться на сервері й отримує значення від власного парсера шорткодів WordPress, запущеного в режимі захоплення.
- Стек
Показати шорткоди як об'єкти, що редагуються, у візуальному редакторіBeforeSetContent замінює шорткоди заповнювачами; PostProcess відновлює текст
Сервер виводить регулярний вираз, побудований із ключів зареєстрованих шорткодів. На BeforeSetContent кожен збіг отримує sc_id, його початковий текст потрапляє в мапу, а сам він замінюється зображенням-заповнювачем з іконкою шорткоду та коротким описом атрибутів у title. На PostProcess заповнювачі замінюються назад із мапи, тож збережений запис містить звичайні шорткоди й нічого, специфічного для редактора.
Форма редагування має відкриватися з поточними значеннями шорткодуЗапустити do_shortcode() у режимі захоплення, щоб WordPress розібрав атрибути в запит
У режимі редагування get_shortcode_template() встановлює прапорець shortcode_mode_edit, залишає з надісланого тексту лише перший зареєстрований шорткод через get_shortcode_regex() і запускає do_shortcode(). Обробник шорткоду плагіна бачить прапорець і зберігає розібрані атрибути замість рендерингу HTML. Поля форми потім читають свої типові значення через set_default_value(), яка їх санітизує.
Так уникають другого парсера атрибутів: лапки, екранування й пробіли обробляє той самий код, що рендерить шорткод на фронтенді.
Стан форми має перетворитися назад на коректний текст шорткодуСеріалізувати позначені поля як атрибути; замінити подвійні лапки; поля-списки з'єднувати через ^
changer() проходить усі елементи форми з позначкою data-shortcode-field. Подвійні лапки всередині значень замінюються одинарними, щоб вони не могли закрити атрибут. Поле з назвою content стає вмістом між тегами шорткоду. Повторювані поля з позначкою save_as_one збираються й з'єднуються через ^ в один атрибут, бо атрибути шорткодів не можуть містити масиви.
WordPress 3.9 змінив API плагінів TinyMCEПостачати дві збірки редактора й обирати одну за $wp_version під час підключення скриптів
TinyMCE 4 у WordPress 3.9 замінив обробники на кшталт onBeforeSetContent.add() на ed.on('BeforeSetContent'). Плагін тримає стару збірку в js/wp38/, а нову в js/ і обирає між ними і для адмін-скрипта, і для зареєстрованого плагіна TinyMCE.
Додавання типу галереї не повинно потребувати змін у ядріШорткоди виявляються з файлів шаблонів; той самий список визначає, які шаблони завантажувати
get_shortcodes_array() сканує views/shortcodes/popups/ і реєструє один шорткод на кожне ім'я файлу. Кожен ключ має шаблон фронтенду й шаблон форми редактора. get_shortcode_key_folder() повертає теку лише для відомих ключів, тож AJAX-виклики не можуть вказати include на інший файл, а get_shortcode_template() для невідомих імен використовує inpost_gallery.
Дані зображень і мініатюри
у продуктіЩо це даєЗ медіатеки можна вибрати багато зображень одразу, один набір може живити кілька галерей, а мініатюри створюються один раз, тож сторінки завантажуються швидко.
- Проблема
- Зображення вибирають із медіатеки як URL, групують і впорядковують для кожного запису, а кожен шорткод просить власний розмір мініатюри. Зміна розміру при кожному перегляді сторінки надто повільна, а реєструвати розмір зображення для кожного можливого налаштування шорткоду неможливо.
- Рішення
Слайди зберігаються одним масивом у post meta. Мініатюри створюються при першому запиті через WP_Image_Editor і далі віддаються з диска.
- Стек
Кожна галерея просить власний розмір мініатюриЗмінювати розмір при першому використанні через WP_Image_Editor, зберігати як name-WxH.ext, повторно використовувати файл, якщо він є
get_image() приймає псевдонім розміру на кшталт 200x150 і викликає ресайзер, адаптований з Aqua Resizer 1.1.7. Він обчислює цільовий розмір через image_resize_dimensions(), шукає наявний файл name-WxH.ext поруч з оригіналом і повертає його URL, або змінює розмір і зберігає файл при першому запиті. Клас перейменовано (Inpg_Aq_ResizePN) і обгорнуто в class_exists, щоб він не конфліктував з темами, які постачають оригінальну бібліотеку.
Вибір багатьох зображень одразу з медіа-модалкиПерехопити send_to_editor, зібрати URL, додавати слайди послідовними AJAX-запитами в порядку вибору
Плагін відкриває стандартну медіа-модалку й тимчасово підміняє window.send_to_editor. Вставлений HTML розбирається в прихованому буфері для пошуку цілей посилань або джерел зображень. add_meta_slide_items() запитує по одному відрендереному слайду й запускає наступний запит у колбеку, тож слайди зберігають порядок вибору. Список можна сортувати, і він перенумеровується після кожної зміни.
Зображення одного запису мають живити кілька різних галерейСлайди мають номер групи; шорткоди вибирають за групою, списком позицій або випадкових N
inpost_gallery_data — це масив слайдів з imgurl, title і group (від 1 до max_thumb_groups, типово 30). Шаблони фронтенду фільтрують його за групою або за списком позицій через кому (з нумерацією від 1), а random=N перемішує й залишає N слайдів (-1 перемішує всі).
Галереї, побудовані із зображень інших записівСинтаксис виразів у post_id (takebyid, take), що розбирається як JSON; запит підготовлено
post_id, що починається з {, вважається виразом. Дужки стають квадратними дужками, а одинарні лапки — подвійними, після чого json_decode() його розбирає. takebyid бере блоки post:count:first|last|rand із зазначених записів. take вибирає N найновіших опублікованих записів типу запису; напрям сортування обмежено ASC або DESC, а тип запису й ліміт прив'язуються через prepare().
Доставка на фронтенд
у продуктіЩо це даєУся галерея може стояти в бічній панелі як одне зображення, на яке можна клацнути, а кожна сторінка завантажує лише ті скрипти галерей, які справді використовує.
- Проблема
- Галерея має вміщуватися у віджет бічної панелі як одне зображення, галереї з різними скриптами можуть ділити сторінку, а AJAX-ендпоінт, що рендерить галереї, відкритий для анонімних відвідувачів.
- Рішення
Зображення-обкладинка несе серіалізований знімок атрибутів шорткоду, а публічний AJAX-обробник заново рендерить той самий шаблон із нього через реєстр шорткодів. Кожен шаблон підключає власні ресурси.
- Стек
Показати всю галерею як одне зображення-обкладинку, на яке можна клацнутиЗнімок атрибутів із вимкненим прапорцем попапа, збережений як base64 JSON, рендериться через AJAX
draw_html() копіює атрибути з show_in_popup, встановленим у 0, у ключ attributes, а потім вмикає прапорець для обкладинки. Шаблон обкладинки виводить знімок як base64 JSON. front.js надсилає його з ключем шорткоду, а get_gallery_by_shortcode() декодує його, знову примусово встановлює show_in_popup у 0, щоб відповіддю завжди була галерея, а не ще одна обкладинка, і рендерить той самий шаблон. Прапорець на клієнті блокує подвійні кліки, поки виконується запит.
Публічний AJAX-обробник підключає PHP-шаблони за іменемКлюч шаблону має розв'язатися через реєстр відомих шорткодів перед include
get_gallery_by_shortcode() зареєстровано для анонімних користувачів, і він отримує ключ шорткоду від клієнта. Він підключає шаблон, лише коли get_shortcode_key_folder() знаходить ключ серед шорткодів, виявлених під час ініціалізації; будь-яке інше значення нічого не рендерить.
Завантажувати скрипт кожного слайдера лише там, де він використовуєтьсяШаблони самі підключають свої CSS і JS під час рендеру; кожен екземпляр отримує контейнер з uniqid
Підключення скриптів і стилів стоїть на початку кожного шаблону шорткоду, тож сторінка завантажує лише бібліотеки тих галерей, які справді показує, і виводить їх у футері. Кожен екземпляр отримує ID контейнера з uniqid(), тож кілька галерей, зокрема на різних скриптах, можуть працювати на одній сторінці.
Цифри
wordpress.org- Активні встановлення 700+ лічильник wordpress.org.
- Відгуки 18 Середня оцінка: 4.0 з 5.
- Років підтримки 14 З 24 квітня 2012 р., останнє оновлення 6 березня 2026 р..