InPost Gallery
WordPress-Plugin, das jedem Beitrag eine Bildergruppe zuordnet und sie über Shortcode-gesteuerte Galerie- und Slider-Skripte anzeigt.
- Erstveröffentlichung
- Aktive Installationen
- 700+
- Bewertung
- Rezensionen lesen
Über mich
InPost Gallery führt eine Liste von Bildern in den Post-Meta jedes aktivierten Post Types und gibt sie über Shortcodes aus. Jeder Shortcode umschließt ein Frontend-Skript (YoxView, Fancybox, Galleria, Nivo Slider, Camera), und ein sechster Shortcode platziert ein einzelnes Bild.
Der Großteil der Ingenieursarbeit steckt im Editor. Im klassischen Editor (TinyMCE) erscheinen Shortcodes als anklickbare Platzhalter, und ein Doppelklick öffnet ein Formular, das bereits mit den aktuellen Attributen des Shortcodes gefüllt ist. Das Plugin hat keine Integration in den Block-Editor. Die Bilderliste selbst ist eine Meta-Box auf dem Bearbeitungsbildschirm des Beitrags. Es deklariert Unterstützung ab WordPress 3.5 und ist bis 6.9 getestet, ein Bereich, der die TinyMCE-API-Änderung in WordPress 3.9 einschließt.
Im Frontend werden Vorschaubilder bei der ersten Verwendung auf die gewünschte Größe zugeschnitten und neben der Originaldatei zwischengespeichert. Eine ganze Galerie kann zu einem einzigen Titelbild zusammenfallen, das die Galerie per AJAX in ein Popup lädt, sodass auch eine große Galerie in einem Sidebar-Widget Platz findet.
InPost Gallery · Galerien in Beiträgen
was gelöst wurde
Visueller Shortcode-Editor
im ProduktWas es bringtRedakteure ändern Galerien über ein Formular im Beitragseditor, statt Codes von Hand zu bearbeiten, was weniger defekte Seiten bedeutet.
- Problem
- Shortcodes mit vielen Attributen sind im Beitragsinhalt von Hand schwer zu bearbeiten. Der klassische Editor (TinyMCE) musste sie als Objekte anzeigen, ein Formular mit ihren aktuellen Werten öffnen und sie zurückschreiben, ohne den Beitrag zu beschädigen.
- Lösung
Ein TinyMCE-Plugin ersetzt Shortcodes beim Laden durch Platzhalterbilder und beim Speichern wieder durch Text. Das Bearbeitungsformular wird auf dem Server gerendert und bezieht seine Werte aus dem eigenen Shortcode-Parser von WordPress, der in einem Erfassungsmodus läuft.
- Stack
Shortcodes im visuellen Editor als bearbeitbare Objekte anzeigenBeforeSetContent ersetzt Shortcodes durch Platzhalter; PostProcess stellt den Text wieder her
Der Server gibt einen regulären Ausdruck aus, der aus den registrierten Shortcode-Schlüsseln gebaut ist. Bei BeforeSetContent erhält jeder Treffer eine sc_id, sein Originaltext kommt in eine Map, und er wird durch einen Bildplatzhalter mit dem Icon des Shortcodes und einer Attributzusammenfassung im Titel ersetzt. Bei PostProcess werden die Platzhalter aus der Map zurückersetzt, sodass der gespeicherte Beitrag reine Shortcodes enthält und nichts Editor-Spezifisches.
Das Bearbeitungsformular muss mit den aktuellen Werten des Shortcodes öffnendo_shortcode() im Erfassungsmodus ausführen, damit WordPress die Attribute in den Request parst
Im Bearbeitungsmodus setzt get_shortcode_template() ein Flag shortcode_mode_edit, behält über get_shortcode_regex() nur den ersten registrierten Shortcode aus dem gesendeten Text und führt do_shortcode() aus. Der Shortcode-Handler des Plugins sieht das Flag und speichert die geparsten Attribute, statt HTML zu rendern. Die Formularfelder lesen ihre Vorgaben dann über set_default_value(), das sie bereinigt.
Das vermeidet einen zweiten Attribut-Parser: Anführungszeichen, Escaping und Leerraum werden vom selben Code behandelt, der den Shortcode im Frontend rendert.
Der Formularzustand muss wieder zu gültigem Shortcode-Text werdenMarkierte Felder als Attribute serialisieren; doppelte Anführungszeichen austauschen; Listenfelder mit ^ verbinden
changer() geht jedes mit data-shortcode-field markierte Formularelement durch. Doppelte Anführungszeichen in Werten werden durch einfache ersetzt, damit sie das Attribut nicht schließen können. Ein Feld namens content wird zum eingeschlossenen Inhalt. Wiederholte Felder, die mit save_as_one markiert sind, werden gesammelt und mit ^ zu einem Attribut verbunden, da Shortcode-Attribute keine Arrays aufnehmen können.
WordPress 3.9 hat die TinyMCE-Plugin-API geändertZwei Editor-Builds ausliefern und beim Einreihen der Skripte anhand von $wp_version einen auswählen
TinyMCE 4 in WordPress 3.9 ersetzte Handler wie onBeforeSetContent.add() durch ed.on('BeforeSetContent'). Das Plugin behält den alten Build in js/wp38/ und den neuen in js/ und wählt zwischen ihnen sowohl für das Admin-Skript als auch für das registrierte TinyMCE-Plugin.
Das Hinzufügen eines Galerietyps soll keine Änderungen am Kern erfordernShortcodes werden aus Template-Dateien erkannt; dieselbe Liste bestimmt, welche Templates geladen werden
get_shortcodes_array() durchsucht views/shortcodes/popups/ und registriert pro Dateiname einen Shortcode. Jeder Schlüssel hat ein Frontend-Template und ein Template für das Editor-Formular. get_shortcode_key_folder() gibt den Ordner nur für bekannte Schlüssel zurück, sodass AJAX-Aufrufer das Include nicht auf eine andere Datei richten können, und get_shortcode_template() weicht bei unbekannten Namen auf inpost_gallery aus.
Bilddaten und Vorschaubilder
im ProduktWas es bringtViele Bilder lassen sich auf einmal aus der Mediathek wählen, eine Bildergruppe kann mehrere Galerien speisen, und Vorschaubilder entstehen nur einmal, damit Seiten schnell laden.
- Problem
- Bilder werden als URLs aus der Mediathek gewählt, pro Beitrag gruppiert und umsortiert, und jeder Shortcode verlangt seine eigene Vorschaugröße. Das Skalieren bei jedem Seitenaufruf ist zu langsam, und für jede mögliche Shortcode-Einstellung eine Bildgröße zu registrieren ist nicht machbar.
- Lösung
Slides werden als ein Array in den Post-Meta gespeichert. Vorschaubilder entstehen bei der ersten Anfrage mit WP_Image_Editor und werden danach von der Festplatte ausgeliefert.
- Stack
Jede Galerie verlangt ihre eigene VorschaugrößeBei der ersten Verwendung mit WP_Image_Editor skalieren, als name-WxH.ext speichern, die Datei wiederverwenden, falls vorhanden
get_image() nimmt einen Größen-Alias wie 200x150 und ruft einen aus Aqua Resizer 1.1.7 angepassten Resizer auf. Er berechnet die Zielgröße mit image_resize_dimensions(), sucht neben dem Original nach einer vorhandenen Datei name-WxH.ext und gibt deren URL zurück oder skaliert und speichert sie bei der ersten Anfrage. Die Klasse ist umbenannt (Inpg_Aq_ResizePN) und in class_exists gekapselt, damit sie nicht mit Themes kollidiert, die die Originalbibliothek mitliefern.
Viele Bilder auf einmal aus dem Medien-Modal auswählensend_to_editor abfangen, URLs sammeln, Slides per sequenziellem AJAX in der Reihenfolge der Auswahl hinzufügen
Das Plugin öffnet das Standard-Medien-Modal und ersetzt vorübergehend window.send_to_editor. Das eingefügte HTML wird in einem verborgenen Puffer auf Link-Ziele oder Bildquellen geparst. add_meta_slide_items() fordert jeweils einen gerenderten Slide an und startet die nächste Anfrage im Callback, sodass die Slides die Reihenfolge der Auswahl behalten. Die Liste ist sortierbar und wird nach jeder Änderung neu nummeriert.
Die Bilder eines Beitrags müssen mehrere verschiedene Galerien speisenSlides tragen eine Gruppennummer; Shortcodes wählen nach Gruppe, Positionsliste oder zufälligen N
inpost_gallery_data ist ein Array von Slides mit imgurl, title und group (1 bis max_thumb_groups, standardmäßig 30). Die Frontend-Templates filtern es nach Gruppe oder nach einer kommagetrennten Liste von Positionen (ab 1), und random=N mischt und behält N Slides (-1 mischt alle).
Galerien aus Bildern anderer BeiträgeAusdruckssyntax in post_id (takebyid, take), als JSON geparst; Abfrage vorbereitet
Eine post_id, die mit { beginnt, wird als Ausdruck behandelt. Runde Klammern werden zu eckigen und einfache Anführungszeichen zu doppelten, dann parst json_decode() ihn. takebyid nimmt Blöcke der Form post:count:first|last|rand aus aufgelisteten Beiträgen. take wählt die N neuesten veröffentlichten Beiträge eines Post Types; die Sortierrichtung ist auf ASC oder DESC beschränkt, und der Post Type und das Limit werden mit prepare() gebunden.
Auslieferung im Frontend
im ProduktWas es bringtEine ganze Galerie kann als ein anklickbares Bild in einer Sidebar sitzen, und jede Seite lädt nur die Galerie-Skripte, die sie tatsächlich verwendet.
- Problem
- Eine Galerie muss als ein Bild in ein Sidebar-Widget passen, Galerien mit unterschiedlichen Skripten können sich eine Seite teilen, und der AJAX-Endpunkt, der Galerien rendert, ist für anonyme Besucher offen.
- Lösung
Das Titelbild trägt einen serialisierten Snapshot der Shortcode-Attribute, und ein öffentlicher AJAX-Handler rendert daraus über die Shortcode-Registry dasselbe Template neu. Jedes Template reiht seine eigenen Assets ein.
- Stack
Eine ganze Galerie als ein anklickbares Titelbild zeigenAttribut-Snapshot mit ausgeschaltetem Popup-Flag, als Base64-JSON gespeichert, per AJAX gerendert
draw_html() kopiert die Attribute mit show_in_popup auf 0 in einen Schlüssel attributes und schaltet dann das Flag für das Titelbild ein. Das Titelbild-Template gibt den Snapshot als Base64-JSON aus. front.js sendet ihn mit dem Shortcode-Schlüssel per POST, und get_gallery_by_shortcode() dekodiert ihn, setzt show_in_popup erneut auf 0, damit die Antwort immer die Galerie und nie ein weiteres Titelbild ist, und rendert dasselbe Template. Ein Flag auf dem Client blockiert Doppelklicks, solange die Anfrage läuft.
Ein öffentlicher AJAX-Handler bindet PHP-Templates per Name einDer Template-Schlüssel muss vor dem include über die Registry bekannter Shortcodes aufgelöst werden
get_gallery_by_shortcode() ist für anonyme Nutzer registriert und erhält den Shortcode-Schlüssel vom Client. Es bindet ein Template nur ein, wenn get_shortcode_key_folder() den Schlüssel unter den beim init erkannten Shortcodes findet; jeder andere Wert rendert nichts.
Jedes Slider-Skript nur dort laden, wo es verwendet wirdTemplates reihen ihr eigenes CSS und JS beim Rendern ein; jede Instanz erhält einen uniqid-Container
Die Einreihung von Skripten und Styles steht am Anfang jedes Shortcode-Templates, sodass eine Seite nur die Bibliotheken der Galerien lädt, die sie tatsächlich zeigt, ausgegeben im Footer. Jede Instanz erhält eine uniqid()-Container-ID, sodass mehrere Galerien, auch solche mit unterschiedlichen Skripten, auf einer Seite laufen können.
Zahlen
wordpress.org- Aktive Installationen 700+ Zähler von wordpress.org.
- Rezensionen 18 Durchschnitt 4.0 von 5.
- Jahre Support 14 Seit 24. April 2012, letztes Update 6. März 2026.