InPost Gallery
Wtyczka WordPress, która dołącza zestaw obrazów do dowolnego wpisu i pokazuje go przez skrypty galerii i sliderów sterowane shortcodami.
- Pierwsze wydanie
- Aktywne instalacje
- 700+
- Ocena
- Czytaj opinie
O mnie
InPost Gallery przechowuje listę obrazów w post meta dowolnego włączonego typu wpisu i wypisuje ją przez shortcody. Każdy shortcode opakowuje jeden skrypt front-endu (YoxView, Fancybox, Galleria, Nivo Slider, Camera), a szósty shortcode umieszcza pojedynczy obraz.
Większość pracy inżynieryjnej dotyczy edytora. W klasycznym edytorze (TinyMCE) shortcody pojawiają się jako klikalne symbole zastępcze, a dwuklik otwiera formularz wypełniony bieżącymi atrybutami shortcode'u. Wtyczka nie ma integracji z edytorem blokowym. Sama lista obrazów to meta box na ekranie edycji wpisu. Deklaruje obsługę od WordPress 3.5 i jest testowana do 6.9, a ten zakres obejmuje zmianę API TinyMCE w WordPress 3.9.
Na front-endzie miniatury są przycinane do żądanego rozmiaru przy pierwszym użyciu i buforowane obok oryginalnego pliku. Cała galeria może zwinąć się do jednego obrazu okładkowego, który ładuje galerię do okna popup przez AJAX, co pozwala umieścić dużą galerię w widżecie paska bocznego.
InPost Gallery · galerie we wpisach
co rozwiązano
Wizualny edytor shortcodów
w produkcieCo to dajeRedaktorzy zmieniają galerie przez formularz w edytorze wpisu zamiast ręcznie edytować kody, co oznacza mniej zepsutych stron.
- Problem
- Shortcody z wieloma atrybutami trudno edytować ręcznie w treści wpisu. Klasyczny edytor (TinyMCE) musiał pokazywać je jako obiekty, otwierać formularz z ich bieżącymi wartościami i zapisywać je z powrotem bez uszkadzania wpisu.
- Rozwiązanie
Wtyczka TinyMCE zamienia shortcody na obrazy zastępcze przy ładowaniu i z powrotem na tekst przy zapisie. Formularz edycji jest renderowany na serwerze, a jego wartości pochodzą z własnego parsera shortcodów WordPress uruchomionego w trybie przechwytywania.
- Technologie
Pokazanie shortcodów jako edytowalnych obiektów w edytorze wizualnymBeforeSetContent zamienia shortcody na symbole zastępcze; PostProcess przywraca tekst
Serwer drukuje wyrażenie regularne zbudowane z zarejestrowanych kluczy shortcodów. Przy BeforeSetContent każde dopasowanie dostaje sc_id, jego oryginalny tekst trafia do mapy, a samo jest zastępowane obrazem zastępczym z ikoną shortcode'u i podsumowaniem atrybutów w tytule. Przy PostProcess symbole zastępcze są przywracane z mapy, więc zapisany wpis zawiera zwykłe shortcody i nic specyficznego dla edytora.
Formularz edycji musi otwierać się z bieżącymi wartościami shortcode'uUruchamiamy do_shortcode() w trybie przechwytywania, aby WordPress sparsował atrybuty do żądania
W trybie edycji get_shortcode_template() ustawia flagę shortcode_mode_edit, zachowuje tylko pierwszy zarejestrowany shortcode z przesłanego tekstu przez get_shortcode_regex() i uruchamia do_shortcode(). Handler shortcode'u wtyczki widzi flagę i zapisuje sparsowane atrybuty zamiast renderować HTML. Pola formularza odczytują potem swoje wartości domyślne przez set_default_value(), które je sanityzuje.
Pozwala to uniknąć drugiego parsera atrybutów: cudzysłowy, escapowanie i odstępy obsługuje ten sam kod, który renderuje shortcode na front-endzie.
Stan formularza musi wrócić do poprawnego tekstu shortcode'uSerializujemy oznaczone pola jako atrybuty; zamieniamy cudzysłowy; pola listowe łączymy znakiem ^
changer() przechodzi przez każdy element formularza oznaczony data-shortcode-field. Podwójne cudzysłowy wewnątrz wartości są zamieniane na pojedyncze, by nie mogły zamknąć atrybutu. Pole o nazwie content staje się zawartością ujętą w shortcode. Powtarzalne pola oznaczone save_as_one są zbierane i łączone znakiem ^ w jeden atrybut, ponieważ atrybuty shortcode'u nie mogą przechowywać tablic.
WordPress 3.9 zmienił API wtyczek TinyMCEDostarczamy dwa buildy edytora i wybieramy jeden według $wp_version przy kolejkowaniu skryptów
TinyMCE 4 w WordPress 3.9 zastąpił handlery takie jak onBeforeSetContent.add() przez ed.on('BeforeSetContent'). Wtyczka trzyma stary build w js/wp38/, a nowy w js/ i wybiera między nimi zarówno dla skryptu administracyjnego, jak i dla zarejestrowanej wtyczki TinyMCE.
Dodanie typu galerii nie powinno wymagać zmian w rdzeniuShortcody są wykrywane z plików szablonów; ta sama lista bramkuje, które szablony się ładują
get_shortcodes_array() skanuje views/shortcodes/popups/ i rejestruje jeden shortcode na nazwę pliku. Każdy klucz ma szablon front-endu i szablon formularza edytora. get_shortcode_key_folder() zwraca folder tylko dla znanych kluczy, więc wywołujący AJAX nie mogą skierować include na inny plik, a get_shortcode_template() wraca do inpost_gallery dla nieznanych nazw.
Dane obrazów i miniatury
w produkcieCo to dajeWiele obrazów można wybrać z biblioteki mediów naraz, jeden zestaw może zasilać kilka galerii, a miniatury powstają raz, więc strony ładują się szybko.
- Problem
- Obrazy są wybierane z biblioteki mediów jako adresy URL, grupowane i porządkowane per wpis, a każdy shortcode prosi o własny rozmiar miniatury. Zmiana rozmiaru przy każdym wyświetleniu strony jest zbyt wolna, a rejestrowanie rozmiaru obrazu dla każdego możliwego ustawienia shortcode'u jest niemożliwe.
- Rozwiązanie
Slajdy są przechowywane jako jedna tablica w post meta. Miniatury powstają przy pierwszym żądaniu przez WP_Image_Editor i potem są serwowane z dysku.
- Technologie
Każda galeria prosi o własny rozmiar miniaturyZmiana rozmiaru przy pierwszym użyciu przez WP_Image_Editor, zapis jako name-WxH.ext, ponowne użycie pliku, jeśli istnieje
get_image() przyjmuje alias rozmiaru, taki jak 200x150, i wywołuje resizer zaadaptowany z Aqua Resizer 1.1.7. Oblicza rozmiar docelowy przez image_resize_dimensions(), szuka istniejącego pliku name-WxH.ext obok oryginału i zwraca jego URL albo zmienia rozmiar i zapisuje go przy pierwszym żądaniu. Klasa ma zmienioną nazwę (Inpg_Aq_ResizePN) i jest opakowana w class_exists, by nie kolidowała z motywami dołączającymi oryginalną bibliotekę.
Zaznaczanie wielu obrazów naraz w oknie modalnym mediówPrzechwytujemy send_to_editor, zbieramy adresy URL i dodajemy slajdy sekwencyjnymi wywołaniami AJAX w kolejności zaznaczenia
Wtyczka otwiera standardowe okno modalne mediów i tymczasowo podmienia window.send_to_editor. Wstawiony HTML jest parsowany w ukrytym buforze pod kątem celów linków lub źródeł obrazów. add_meta_slide_items() prosi o jeden wyrenderowany slajd naraz i uruchamia następne żądanie w callbacku, dzięki czemu slajdy zachowują kolejność zaznaczenia. Lista jest sortowalna i renumerowana po każdej zmianie.
Obrazy jednego wpisu muszą zasilać kilka różnych galeriiSlajdy mają numer grupy; shortcody wybierają według grupy, listy pozycji lub losowych N
inpost_gallery_data to tablica slajdów z imgurl, title i group (od 1 do max_thumb_groups, domyślnie 30). Szablony front-endu filtrują ją według grupy lub według listy pozycji liczonych od 1, rozdzielonej przecinkami, a random=N tasuje i zachowuje N slajdów (-1 tasuje wszystkie).
Galerie budowane z obrazów innych wpisówSkładnia wyrażeń w post_id (takebyid, take), parsowana jako JSON; zapytanie przygotowane
post_id zaczynający się od { jest traktowany jako wyrażenie. Nawiasy okrągłe stają się kwadratowymi, a pojedyncze cudzysłowy podwójnymi, po czym json_decode() je parsuje. takebyid bierze bloki post:count:first|last|rand z wymienionych wpisów. take wybiera N najnowszych opublikowanych wpisów danego typu; kierunek sortowania jest ograniczony do ASC lub DESC, a typ wpisu i limit są wiązane przez prepare().
Dostarczanie na front-endzie
w produkcieCo to dajeCała galeria może znaleźć się na pasku bocznym jako jeden klikalny obraz, a każda strona ładuje tylko te skrypty galerii, których faktycznie używa.
- Problem
- Galeria musi zmieścić się w widżecie paska bocznego jako jeden obraz, galerie z różnymi skryptami mogą dzielić stronę, a endpoint AJAX renderujący galerie jest otwarty dla anonimowych odwiedzających.
- Rozwiązanie
Obraz okładkowy niesie zserializowaną migawkę atrybutów shortcode'u, a publiczny handler AJAX ponownie renderuje z niej ten sam szablon przez rejestr shortcodów. Każdy szablon kolejkuje własne zasoby.
- Technologie
Pokazanie całej galerii jako jednego klikalnego obrazu okładkowegoMigawka atrybutów z wyłączoną flagą popup, zapisana jako JSON w base64, renderowana przez AJAX
draw_html() kopiuje atrybuty z show_in_popup ustawionym na 0 do klucza attributes, po czym włącza flagę dla okładki. Szablon okładki drukuje migawkę jako JSON w base64. front.js wysyła ją razem z kluczem shortcode'u, a get_gallery_by_shortcode() ją dekoduje, ponownie wymusza show_in_popup na 0, by odpowiedzią zawsze była galeria, a nigdy kolejna okładka, i renderuje ten sam szablon. Flaga po stronie klienta blokuje podwójne kliknięcia, gdy żądanie trwa.
Publiczny handler AJAX dołącza szablony PHP według nazwyKlucz szablonu musi zostać rozwiązany przez rejestr znanych shortcodów przed include
get_gallery_by_shortcode() jest zarejestrowany dla anonimowych użytkowników i dostaje klucz shortcode'u od klienta. Dołącza szablon tylko wtedy, gdy get_shortcode_key_folder() znajdzie klucz wśród shortcodów wykrytych przy init; każda inna wartość nie renderuje niczego.
Ładowanie skryptu każdego slidera tylko tam, gdzie jest używanySzablony kolejkują własne CSS i JS przy renderowaniu; każda instancja dostaje kontener z uniqid
Kolejkowanie skryptów i stylów znajduje się na górze każdego szablonu shortcode'u, więc strona ładuje tylko biblioteki galerii, które faktycznie pokazuje, drukowane w stopce. Każda instancja dostaje ID kontenera z uniqid(), dzięki czemu kilka galerii, także na różnych skryptach, może działać na jednej stronie.
Liczby
wordpress.org- Aktywne instalacje 700+ licznik wordpress.org.
- Opinie 18 Średnia ocena: 4.0 na 5.
- Lat wsparcia 14 Od 24 kwietnia 2012, ostatnia aktualizacja 6 marca 2026.