{"id":253246,"date":"2025-10-02T14:48:58","date_gmt":"2025-10-02T14:48:58","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/luxe-gallery\/"},"modified":"2026-06-15T10:16:09","modified_gmt":"2026-06-15T10:16:09","slug":"luxe-gallery","status":"publish","type":"plugin","link":"https:\/\/ru.wordpress.org\/plugins\/luxe-gallery\/","author":23367450,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.2.13","stable_tag":"2.2.13","tested":"7.0","requires":"5.0","requires_php":"7.4","requires_plugins":null,"header_name":"Luxe Gallery","header_author":"Janni Hares","header_description":"Premium gallery with category management - Ideal for real estate, vacation rentals and portfolios. Features customizable hero grid, automatic categorization, WebP optimization and immersive fullscreen view for professional presentations.","assets_banners_color":"47402e","last_updated":"2026-06-15 10:16:09","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/jajasolutions.de","header_plugin_uri":"https:\/\/jajasolutions.de\/luxe-gallery","header_author_uri":"https:\/\/jajasolutions.de","rating":5,"author_block_rating":0,"active_installs":0,"downloads":1176,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"jajasolutions","date":"2025-11-30 23:44:29"},"1.0.1":{"tag":"1.0.1","author":"jajasolutions","date":"2025-11-30 23:44:29"},"1.1.0":{"tag":"1.1.0","author":"jajasolutions","date":"2026-01-07 10:55:32"},"1.1.1":{"tag":"1.1.1","author":"jajasolutions","date":"2026-01-07 11:43:35"},"2.0.0":{"tag":"2.0.0","author":"jajasolutions","date":"2026-02-09 15:53:42"},"2.0.1":{"tag":"2.0.1","author":"jajasolutions","date":"2026-02-09 16:00:00"},"2.0.2":{"tag":"2.0.2","author":"jajasolutions","date":"2026-02-09 17:01:00"},"2.0.3":{"tag":"2.0.3","author":"jajasolutions","date":"2026-02-09 17:02:39"},"2.0.4":{"tag":"2.0.4","author":"jajasolutions","date":"2026-02-09 17:36:04"},"2.0.5":{"tag":"2.0.5","author":"jajasolutions","date":"2026-02-09 17:47:04"},"2.2.10":{"tag":"2.2.10","author":"jajasolutions","date":"2026-05-11 16:29:08"},"2.2.11":{"tag":"2.2.11","author":"jajasolutions","date":"2026-05-20 08:27:46"},"2.2.12":{"tag":"2.2.12","author":"jajasolutions","date":"2026-05-21 13:06:43"},"2.2.13":{"tag":"2.2.13","author":"jajasolutions","date":"2026-06-15 10:16:09"},"2.2.2":{"tag":"2.2.2","author":"jajasolutions","date":"2026-04-13 16:05:49"},"2.2.3":{"tag":"2.2.3","author":"jajasolutions","date":"2026-04-13 16:35:01"},"2.2.4":{"tag":"2.2.4","author":"jajasolutions","date":"2026-04-13 19:31:04"},"2.2.5":{"tag":"2.2.5","author":"jajasolutions","date":"2026-04-16 21:52:51"},"2.2.6":{"tag":"2.2.6","author":"jajasolutions","date":"2026-04-18 16:59:29"},"2.2.7":{"tag":"2.2.7","author":"jajasolutions","date":"2026-04-20 16:16:24"},"2.2.8":{"tag":"2.2.8","author":"jajasolutions","date":"2026-04-21 15:59:23"},"2.2.9":{"tag":"2.2.9","author":"jajasolutions","date":"2026-05-11 14:37:20"}},"upgrade_notice":{"1.1.0":"<p>Major update with WordPress 6.9 compatibility, extended shortcode parameters, new layout options, hooks\/filters for developers, and UI improvements.<\/p>","1.0.1":"<p>Ensures English originals before translation on translate.wordpress.org.<\/p>","1.0.0":"<p>Initial release of Luxe Gallery - the most modern gallery plugin for WordPress.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3370485,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3370485,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3370485,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3370485,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"luxe-gallery\/gallery":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"luxe-gallery\/gallery","version":"1.1.1","title":"Luxe Gallery","category":"media","icon":"format-gallery","description":"Display a beautiful Airbnb-style hero grid gallery with categories and lightbox.","keywords":["gallery","images","photos","hero","grid","airbnb","lightbox"],"textdomain":"luxe-gallery","attributes":{"galleryId":{"type":"string","default":""},"showTitle":{"type":"boolean","default":false},"titleTag":{"type":"string","default":"h2","enum":["h1","h2","h3","h4","h5","h6"]},"layout":{"type":"string","default":"hero-grid","enum":["hero-grid","grid","masonry"]},"columns":{"type":"number","default":4},"gap":{"type":"number","default":8},"borderRadius":{"type":"number","default":12},"showImageCount":{"type":"boolean","default":true},"enableLightbox":{"type":"boolean","default":true},"enableSharing":{"type":"boolean","default":false}},"supports":{"html":false,"align":["wide","full"],"anchor":true,"className":true,"color":{"background":true,"text":false},"spacing":{"margin":true,"padding":true}},"editorScript":"file:.\/js\/luxe-gallery-block.js","editorStyle":"file:.\/css\/luxe-gallery-block-editor.css","style":"file:..\/public\/css\/luxe-gallery-public.css","render":"file:.\/render.php"}},"tagged_versions":["1.0.0","1.0.1","1.1.0","1.1.1","2.0.0","2.0.1","2.0.2","2.0.3","2.0.4","2.0.5","2.2.10","2.2.11","2.2.12","2.2.13","2.2.2","2.2.3","2.2.4","2.2.5","2.2.6","2.2.7","2.2.8","2.2.9"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3370485,"resolution":"1","location":"assets","locale":"","width":1286,"height":746},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3370485,"resolution":"2","location":"assets","locale":"","width":1311,"height":575},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3370485,"resolution":"3","location":"assets","locale":"","width":779,"height":732},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3370485,"resolution":"4","location":"assets","locale":"","width":1922,"height":882}},"screenshots":{"1":"Hero Grid Layout - Attractive 5-image grid as entry point","2":"Mobile Slider - Optimized display for mobile devices","3":"Category-Based Gallery - Organized image display with navigation","4":"Lightbox - Modern lightbox experience","5":"Admin Interface - Intuitive drag &amp; drop management","6":"Plugin Settings - Comprehensive configuration options"}},"plugin_section":[],"plugin_tags":[210,148076,237,606,15376],"plugin_category":[50],"plugin_contributors":[],"plugin_business_model":[],"class_list":["post-253246","plugin","type-plugin","status-publish","hentry","plugin_tags-gallery","plugin_tags-gutenberg","plugin_tags-lightbox","plugin_tags-responsive","plugin_tags-webp","plugin_category-media","plugin_committers-jajasolutions"],"banners":{"banner":"https:\/\/ps.w.org\/luxe-gallery\/assets\/banner-772x250.png?rev=3370485","banner_2x":"https:\/\/ps.w.org\/luxe-gallery\/assets\/banner-1544x500.png?rev=3370485","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/luxe-gallery\/assets\/icon-128x128.png?rev=3370485","icon_2x":"https:\/\/ps.w.org\/luxe-gallery\/assets\/icon-256x256.png?rev=3370485","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/luxe-gallery\/assets\/screenshot-1.png?rev=3370485","caption":"Hero Grid Layout - Attractive 5-image grid as entry point"},{"src":"https:\/\/ps.w.org\/luxe-gallery\/assets\/screenshot-2.png?rev=3370485","caption":"Mobile Slider - Optimized display for mobile devices"},{"src":"https:\/\/ps.w.org\/luxe-gallery\/assets\/screenshot-3.png?rev=3370485","caption":"Category-Based Gallery - Organized image display with navigation"},{"src":"https:\/\/ps.w.org\/luxe-gallery\/assets\/screenshot-4.png?rev=3370485","caption":"Lightbox - Modern lightbox experience"}],"raw_content":"<!--section=description-->\n<p>Luxe Gallery revolutionizes WordPress galleries with a visual grid editor that lets you create unique hero layouts. Combined with automatic WebP conversion, category-based organization and an immersive fullscreen view, it offers the perfect solution for professional image presentations.<\/p>\n\n<h4>Key Features<\/h4>\n\n<ul>\n<li><strong>\ud83c\udfa8 Visual Grid Editor<\/strong>: Create custom hero layouts with drag &amp; drop - uniquely customizable for each gallery<\/li>\n<li><strong>\ud83d\udcf1 Mobile-First Design<\/strong>: Responsive design with custom slider for mobile devices<\/li>\n<li><strong>\ud83d\uddc2\ufe0f Category-Based Organization<\/strong>: Organize images in custom categories<\/li>\n<li><strong>\ud83d\udca1 Lightbox<\/strong>: Modern, touch-friendly lightbox experience<\/li>\n<li><strong>\u26a1 WebP Optimization<\/strong>: Automatic WebP conversion for better performance<\/li>\n<li><strong>\ud83c\udfa8 Drag &amp; Drop Interface<\/strong>: Intuitive admin interface for managing images<\/li>\n<li><strong>\ud83d\udcdd Shortcode Support<\/strong>: Easy integration with <code>[luxe_gallery id=\"123\"]<\/code><\/li>\n<li><strong>\ud83d\udd27 Page Builder Integration<\/strong>: Native support for Gutenberg, Elementor, Divi, Beaver Builder and Bricks Builder<\/li>\n<li><strong>\u2699\ufe0f Comprehensive Settings<\/strong>: Fully configurable options for performance and design<\/li>\n<\/ul>\n\n<h4>Performance Features<\/h4>\n\n<ul>\n<li><strong>Lazy Loading<\/strong>: Images are loaded only when needed<\/li>\n<li><strong>WebP Support<\/strong>: Automatic conversion to modern image formats<\/li>\n<li><strong>Optimized Database Queries<\/strong>: Minimal impact on website performance<\/li>\n<li><strong>CDN Compatible<\/strong>: Works with all common CDN solutions<\/li>\n<\/ul>\n\n<h4>Page Builder Compatibility<\/h4>\n\n<ul>\n<li><strong>Gutenberg Block<\/strong>: Native block for the WordPress Block Editor<\/li>\n<li><strong>Elementor Widget<\/strong>: Fully integrated widget with live preview<\/li>\n<li><strong>Divi Module<\/strong>: Custom module for the Divi Builder<\/li>\n<li><strong>Beaver Builder Module<\/strong>: Seamless integration with Beaver Builder<\/li>\n<li><strong>Bricks Builder Element<\/strong>: Native Bricks element with all options<\/li>\n<\/ul>\n\n<h4>Technical Details<\/h4>\n\n<ul>\n<li>Fully responsive and mobile-optimized<\/li>\n<li>SEO-friendly with structured data<\/li>\n<li>Accessibility compliant (WCAG 2.1)<\/li>\n<li>Translation-ready (i18n)<\/li>\n<li>Compatible with all major themes and page builders<\/li>\n<li>Clean, validated code<\/li>\n<\/ul>\n\n<h4>Shortcode Usage<\/h4>\n\n<pre><code>[luxe_gallery id=\"123\"]\n<\/code><\/pre>\n\n<p><strong>Parameters:<\/strong><\/p>\n\n<ul>\n<li><code>id<\/code> - The gallery ID (required)<\/li>\n<li><code>show_title<\/code> - Show gallery title: yes\/no (default: no)<\/li>\n<li><code>title_tag<\/code> - HTML tag for title: h1-h6 (default: h2)<\/li>\n<li><code>layout<\/code> - Layout style: hero-grid, grid, masonry (default: hero-grid)<\/li>\n<li><code>columns<\/code> - Number of columns: 2-6 (default: 4, for grid\/masonry layouts)<\/li>\n<li><code>gap<\/code> - Gap between images in pixels (default: 8)<\/li>\n<li><code>border_radius<\/code> - Border radius in pixels (default: 12)<\/li>\n<li><code>show_image_count<\/code> - Show photo count on button: yes\/no (default from settings)<\/li>\n<li><code>lightbox<\/code> - Enable lightbox: yes\/no (default: yes)<\/li>\n<li><code>sharing<\/code> - Enable social sharing: yes\/no (default: no)<\/li>\n<li><code>virtual_tour<\/code> - Virtual tour URL (optional)<\/li>\n<li><code>class<\/code> - Additional CSS classes (optional)<\/li>\n<\/ul>\n\n<p><strong>Example with all parameters:<\/strong><\/p>\n\n<pre><code>[luxe_gallery id=\"123\" layout=\"masonry\" columns=\"3\" gap=\"12\" lightbox=\"yes\" sharing=\"yes\"]\n<\/code><\/pre>\n\n<h3>Technical Information<\/h3>\n\n<h4>Minimum Requirements<\/h4>\n\n<ul>\n<li>WordPress 5.0 or higher<\/li>\n<li>PHP 7.4 or higher<\/li>\n<li>MySQL 5.6 or higher<\/li>\n<li>At least 64MB PHP Memory Limit<\/li>\n<\/ul>\n\n<h4>Recommended Requirements<\/h4>\n\n<ul>\n<li>WordPress 6.0 or higher<\/li>\n<li>PHP 8.0 or higher<\/li>\n<li>MySQL 8.0 or higher<\/li>\n<li>128MB PHP Memory Limit<\/li>\n<li>GD Library or ImageMagick for WebP conversion<\/li>\n<\/ul>\n\n<h4>Used Libraries<\/h4>\n\n<ul>\n<li>No external JavaScript libraries \u2014 all components are custom-built<\/li>\n<li>Zero dependencies for optimal performance<\/li>\n<\/ul>\n\n<h4>Support<\/h4>\n\n<p>For support and questions visit:\n* Website: https:\/\/jajasolutions.de\n* Plugin Support Forum: https:\/\/wordpress.org\/support\/plugin\/luxe-gallery (after publication)\n* Developer: Janni Hares<\/p>\n\n<h4>Contributing<\/h4>\n\n<p>Contributions are welcome! Visit our GitHub repository for more information.<\/p>\n\n<h4>Privacy<\/h4>\n\n<p>Luxe Gallery does not collect any personal data from website visitors. All data is stored locally in your WordPress installation.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin via the WordPress admin panel or install it through the plugin directory<\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress<\/li>\n<li>Go to 'Luxe Gallery' &gt; 'Add New' to create your first gallery<\/li>\n<li>Configure the plugin settings under 'Luxe Gallery' &gt; 'Settings'<\/li>\n<li>Use the shortcode <code>[luxe_gallery id=\"ID\"]<\/code> to display the gallery<\/li>\n<\/ol>\n\n<h4>Usage with Page Builders<\/h4>\n\n<p><strong>Gutenberg<\/strong>: Search for the \"Luxe Gallery\" block in the Block Editor\n<strong>Elementor<\/strong>: Find the \"Luxe Gallery\" widget in the Elementor sidebar\n<strong>Divi<\/strong>: Add the \"Luxe Gallery\" module from the Divi Builder\n<strong>Beaver Builder<\/strong>: Select \"Luxe Gallery\" from the Content Modules\n<strong>Bricks Builder<\/strong>: Use the \"Luxe Gallery\" element in the Bricks Editor<\/p>\n\n<h4>Manual Installation<\/h4>\n\n<ol>\n<li>Upload the plugin directory to the <code>\/wp-content\/plugins\/<\/code> folder<\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress<\/li>\n<li>Follow the installation steps above<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20create%20a%20new%20gallery%3F\"><h3>How do I create a new gallery?<\/h3><\/dt>\n<dd><ol>\n<li>Go to 'Luxe Gallery' &gt; 'Add New'<\/li>\n<li>Enter a title for your gallery<\/li>\n<li>Select 5 hero images for the grid layout<\/li>\n<li>Add categories and organize your images<\/li>\n<li>Save the gallery and copy the generated shortcode<\/li>\n<\/ol><\/dd>\n<dt id=\"does%20the%20plugin%20support%20webp%20images%3F\"><h3>Does the plugin support WebP images?<\/h3><\/dt>\n<dd><p>Yes, Luxe Gallery automatically converts uploaded images to WebP format for better performance. This can be configured in the plugin settings.<\/p><\/dd>\n<dt id=\"is%20the%20plugin%20responsive%3F\"><h3>Is the plugin responsive?<\/h3><\/dt>\n<dd><p>Absolutely! Luxe Gallery is developed mobile-first and provides optimal display on all devices, from smartphones to desktop computers.<\/p><\/dd>\n<dt id=\"can%20i%20customize%20the%20design%3F\"><h3>Can I customize the design?<\/h3><\/dt>\n<dd><p>Yes, the plugin offers comprehensive settings options. Additionally, you can further customize the appearance with CSS.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20my%20theme%3F\"><h3>Does it work with my theme?<\/h3><\/dt>\n<dd><p>Luxe Gallery is designed to be compatible with most WordPress themes. If you encounter issues, please contact support.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20work%20with%20page%20builders%3F\"><h3>Does the plugin work with page builders?<\/h3><\/dt>\n<dd><p>Yes! Luxe Gallery offers native integration for all major page builders:\n- Gutenberg (WordPress Block Editor)\n- Elementor\n- Divi Builder\n- Beaver Builder\n- Bricks Builder<\/p>\n\n<p>Each builder has its own custom module\/widget with live preview and all settings options.<\/p><\/dd>\n<dt id=\"which%20file%20formats%20are%20supported%3F\"><h3>Which file formats are supported?<\/h3><\/dt>\n<dd><p>The plugin supports all common image formats: JPEG, PNG, GIF, WebP and SVG.<\/p><\/dd>\n<dt id=\"can%20i%20use%20multiple%20galleries%20on%20one%20page%3F\"><h3>Can I use multiple galleries on one page?<\/h3><\/dt>\n<dd><p>Yes, you can include as many galleries as you like on a page by using multiple shortcodes.<\/p><\/dd>\n<dt id=\"are%20there%20limits%20to%20the%20number%20of%20images%3F\"><h3>Are there limits to the number of images?<\/h3><\/dt>\n<dd><p>No, there are no technical limits. Performance depends on your hosting and the number of images.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.2.13<\/h4>\n\n<ul>\n<li>Fixed: On Safari older than 15.4 (and any browser without native <code>&lt;dialog&gt;<\/code> support), the full-view modal was not hidden when closed \u2014 its category navigation and image sections appeared permanently exposed below the gallery. The closed dialog is now explicitly hidden, and \"Show all photos\" opens it through a fixed full-screen fallback (with background-scroll lock and Escape-to-close) when <code>showModal()<\/code> is unavailable.<\/li>\n<li>Improved: On smartphones the feature buttons (Video, Floor Plan, Before\/After, 360\u00b0 Virtual Tour) collapse to compact icon-only buttons and move into their own centered row below the slider, so they no longer overlap the \"Show all photos\" button. Each button keeps an accessible label for screen readers; desktop is unchanged.<\/li>\n<\/ul>\n\n<h4>2.2.12<\/h4>\n\n<ul>\n<li>New: Two opt-in display settings under \"Display Defaults\" for the category navigation strip in the full-view modal.\n\n<ul>\n<li><strong>Category Navigation Layout<\/strong> \u2014 choose between the existing single-row horizontal scroll (default) and \"wrap into multiple rows\", which is easier to discover on galleries with many categories. Mobile always keeps native horizontal swipe regardless of the setting.<\/li>\n<li><strong>Category Thumbnail Format<\/strong> \u2014 pick the aspect ratio of the small thumbnails: square (default), portrait (3:4), landscape (4:3), or circle. Useful when a theme overrides one dimension and the thumbnails come out stretched.<\/li>\n<\/ul><\/li>\n<li>No behaviour change for existing installs: both settings only emit inline CSS when actively selected in the admin, so untouched sites render byte-identical HTML.<\/li>\n<\/ul>\n\n<h4>2.2.11<\/h4>\n\n<ul>\n<li>Confirmed compatibility with WordPress 7.0. Verified the iframed block editor (editor styles are correctly declared via <code>block.json<\/code> <code>editorStyle<\/code>, no parent-frame DOM assumptions in the block JS), the new \"Modern\" admin theme (admin CSS uses <code>var(--wp-admin-theme-color, \u2026)<\/code> with safe fallbacks, no hard-coded WP core blues), and PHP 8.3 (no <code>${var}<\/code> interpolation, no implicit <code>null \u2192 string<\/code>, no undeclared dynamic properties).<\/li>\n<\/ul>\n\n<h4>2.2.10<\/h4>\n\n<ul>\n<li>Fixed: <code>hero=\"no\"<\/code> had no visible effect when combined with grid\/masonry layout. Two layout-scoped CSS rules forced the dialog inline-visible (<code>display: block; position: static; background: transparent<\/code>) and disabled the modal backdrop on those layouts, regardless of the new <code>hero-hidden<\/code> container class. Both rules now exclude <code>hero=\"no\"<\/code> instances so the dialog stays a true modal with an opaque backdrop on every layout.<\/li>\n<li>Fixed: <code>LuxeGallery.open(id)<\/code> (and the <code>data-luxe-gallery-open<\/code> trigger) threw <code>InvalidStateError<\/code> when used on a grid\/masonry gallery without <code>hero=\"no\"<\/code> because the dialog already had the <code>open<\/code> attribute. The trigger now smoothly scrolls to the inline gallery in that case rather than failing silently.<\/li>\n<\/ul>\n\n<h4>2.2.9<\/h4>\n\n<ul>\n<li>New: Public JavaScript API to open the full-view modal programmatically from any custom button, menu item or theme code. <code>LuxeGallery.open(id)<\/code>, <code>LuxeGallery.close(id)<\/code>, <code>LuxeGallery.toggle(id)<\/code> and <code>LuxeGallery.getInstance(id)<\/code> are exposed on <code>window<\/code> and work regardless of layout.<\/li>\n<li>New: Declarative trigger attribute \u2014 any element with <code>data-luxe-gallery-open=\"123\"<\/code> opens gallery 123 on click. Works on <code>&lt;button&gt;<\/code>, <code>&lt;a&gt;<\/code>, anywhere on the page. No JavaScript required.<\/li>\n<li>New: Shortcode attribute <code>hero=\"no\"<\/code> renders only the modal full-view dialog without an inline hero grid, mobile slider or feature buttons. Combine with a custom trigger to embed the gallery anywhere \u2014 menu link, sticky CTA, custom block \u2014 without taking visible space on the page.<\/li>\n<li>Fixed: Plugin version is now part of the per-gallery transient cache key, so plugin updates that change rendered HTML auto-invalidate caches without requiring a manual re-save of each gallery. Closes a long-standing upgrade-path gap that surfaced with 2.2.8.<\/li>\n<\/ul>\n\n<h4>2.2.8<\/h4>\n\n<ul>\n<li>Fixed: Hero grid area assignments (e.g. image 4 spanning 2 columns) and per-gallery JS config were missing for logged-out visitors on cached page loads. The transient-cache fast path in <code>render_shortcode<\/code> returned the cached HTML without re-running <code>wp_add_inline_style()<\/code> \/ <code>wp_add_inline_script()<\/code>, so anyone hitting the cache received markup without the per-gallery grid CSS or the <code>window.luxe_gallery_config_*<\/code> \/ <code>window.luxe_gallery_all_images_*<\/code> globals. Per-gallery CSS and JS are now emitted as <code>&lt;style&gt;<\/code> \/ <code>&lt;script&gt;<\/code> tags inside the cached HTML output, so they survive every cache path (page cache, object cache, LiteSpeed CSS combine).<\/li>\n<\/ul>\n\n<h4>2.2.7<\/h4>\n\n<ul>\n<li>Mobile slider: Fixed image bottom corners appearing sharp while top corners rounded \u2014 the <code>.luxe-gallery-image-wrapper<\/code> had no height, so the image rendered at its intrinsic aspect and left a bare edge above the slider's rounded bottom. Wrapper now stretches to fill the slide.<\/li>\n<li>Mobile slider: Pagination dots moved onto a translucent pill (<code>backdrop-filter: blur(6px)<\/code>) so white\/black dots stay legible on any image background \u2014 sky, shadow, pool water \u2014 without drifting off-scene.<\/li>\n<li>Mobile slider: Pagination now caps at 3 visible dots (prev \/ current \/ next) with a sliding window \u2014 fixes an accessibility issue where 10+ dots crowded together on long galleries and became indistinguishable.<\/li>\n<li>Mobile slider: Fixed a long-standing specificity bug where the <code>.luxe-gallery-container button<\/code> reset zeroed out pagination-dot padding and margin, collapsing the intended touch area. Dots now use a ::before overlay for a 38\u00d738 hit zone (exceeds WCAG 2.5.8 AA 24\u00d724) while the visible dot stays 10 px and the pill stays compact.<\/li>\n<li>Mobile slider: Increased visual spacing between dots (12 px gap) so adjacent targets are distinguishable on touch.<\/li>\n<li>Mobile slider: \"Show all N photos\" button no longer wraps to two lines on narrow phones (iPhone SE, 375 px) \u2014 added <code>white-space: nowrap<\/code> and <code>max-width: calc(100% - 32px)<\/code>.<\/li>\n<\/ul>\n\n<h4>2.2.6<\/h4>\n\n<ul>\n<li>Admin UI: Fixed icon-to-label spacing on \"Add Images\" and \"Remove Category\" buttons \u2014 they now raise specificity above WP core <code>.button<\/code> so flex gap wins regardless of stylesheet load order.<\/li>\n<li>Admin UI: Image \"remove\" control expanded to a 44\u00d744 px hit area (WCAG 2.5.5) via content-box padding + background-clip; the visible pill stays compact and the control is now always visible on touch devices and on keyboard focus.<\/li>\n<li>Admin UI: Replaced every inline <code>style=\"\u2026\"<\/code> in the media meta box (Videos, Floor Plan, Before\/After) with reusable classes \u2014 destructive buttons route through a single <code>.luxe-remove-btn<\/code> token that respects <code>--luxe-admin-danger<\/code>.<\/li>\n<li>Admin UI: Removed ~10 duplicate CSS selector blocks that made cascade behavior brittle; margins and paddings from the old rules are preserved in the consolidated versions.<\/li>\n<li>Admin UI: Merged two colliding <code>@media (max-width: 768px)<\/code> blocks and fixed an unreachable <code>flex-direction: column<\/code> on a CSS grid parent \u2014 the grid editor now correctly collapses to a single column on mobile.<\/li>\n<li>Accessibility: Admin body-text secondary color upgraded from #a0a5aa (2.3:1, fail) to #646970 (4.56:1, pass WCAG AA). Three other grey-on-white contrast failures on remove-links and empty-state text now use the same token.<\/li>\n<li>i18n: Empty-state hints (\"No categories yet\u2026\", \"Drop images here\u2026\") moved from hard-coded CSS strings to translatable PHP via <code>data-empty-text<\/code> attributes.<\/li>\n<\/ul>\n\n<h4>2.2.5<\/h4>\n\n<ul>\n<li>Security: AI custom endpoint URL now validated against an http(s) allowlist; outbound calls refuse loopback\/private\/reserved IPs to block SSRF.<\/li>\n<li>Security: PDF export and original-download AJAX endpoints now require edit_post \/ read_post on the specific gallery instead of a generic site-wide capability.<\/li>\n<li>Security: Gallery password sessions default to 2-hour lifetime (filterable via <code>luxe_gallery_password_session_lifetime<\/code>) and uninstall now scrubs cache-version and floor-plan hotspot meta.<\/li>\n<li>Performance: Gallery output cache invalidation now uses per-post version keys, so saves invalidate transients on external object caches (Redis, Memcached) without enumerating hashed keys.<\/li>\n<li>Accessibility: Screen readers now hear a single polite announcement per lightbox navigation (\"Image 3 of 12, caption\") instead of two separate regions firing.<\/li>\n<li>Accessibility: Before\/After slider exposes <code>aria-valuetext<\/code> with human-readable percentages and labels.<\/li>\n<li>Accessibility: Focus rings meet WCAG 2.4.7 \u2014 thicker outline plus light contrast layer so rings stay visible over dark and light images.<\/li>\n<li>Accessibility: Keyboard shortcuts (F\/G\/?\/Home\/End) are now scoped to the gallery container, preventing cross-gallery conflicts on pages with multiple instances.<\/li>\n<li>Accessibility: Lightbox focus trap now includes iframes, links, and custom tabindex elements so embedded video controls stay reachable.<\/li>\n<li>Accessibility: Decorative icons carry <code>aria-hidden=\"true\"<\/code>; inline <code>&lt;dialog&gt;<\/code> on grid\/masonry layouts announces as a region, not a dialog.<\/li>\n<li>Accessibility: Alt text now prefers <code>_wp_attachment_image_alt<\/code> across every rendering path (template, lightbox, floor plan).<\/li>\n<li>Accessibility: Plugin ships its own <code>.screen-reader-text<\/code> utility so SR-only text works even on themes that omit it.<\/li>\n<\/ul>\n\n<h4>2.2.4<\/h4>\n\n<ul>\n<li>Fixed: Lightbox caption showing image filename even when \"Show image titles\" setting is disabled<\/li>\n<\/ul>\n\n<h4>2.2.3<\/h4>\n\n<ul>\n<li>Fixed: Hero grid layout broken \u2014 CSS class mismatch (.item-X vs .area-X) caused flat grid instead of Airbnb-style 2x2+4 layout<\/li>\n<li>Fixed: Lightbox shows blank images when lazy-loading plugin (LiteSpeed\/WP Rocket) replaces img src with data-URI placeholder<\/li>\n<li>Fixed: \"Show all photos\" dialog empty when gallery has only hero images and no categories \u2014 now falls back to hero images<\/li>\n<li>Fixed: LQIP thumbnail images no longer duplicated in lightbox navigation (aria-hidden images filtered out)<\/li>\n<\/ul>\n\n<h4>2.2.2<\/h4>\n\n<ul>\n<li>Full view now uses native HTML dialog element \u2014 proper focus trapping, Escape key handling, and top-layer rendering<\/li>\n<li>Fixed: Plugin settings (colors, gap, border radius, button text) now correctly applied on the frontend<\/li>\n<li>Fixed: Custom button text setting for \"Show all photos\" button<\/li>\n<li>Fixed: Hero images now included in lightbox navigation (click hero image \u2192 opens lightbox)<\/li>\n<li>Fixed: Critical error on gallery admin list when gallery data stored as array instead of JSON<\/li>\n<li>Fixed: Data loss when saving gallery with only videos\/floor plan but no categories<\/li>\n<li>Fixed: Transient key injection in WebP conversion progress handler<\/li>\n<li>Fixed: Feature buttons (Video, Floor Plan, Before\/After) now visible on mobile<\/li>\n<li>Fixed: Layout shortcode parameter (grid\/masonry) now respected<\/li>\n<li>Fixed: LuxeLightbox and LuxeCompare re-entrant close\/destroy crash<\/li>\n<li>Fixed: Gutenberg block TypeError on non-block-editor pages<\/li>\n<li>Fixed: Uninstall now cleans up all meta keys (videos, floor plan, before\/after)<\/li>\n<li>Fixed: Transient cache now invalidated when plugin settings change<\/li>\n<li>Improved: Hero images with width\/height attributes, srcset\/sizes, and fetchpriority for better Core Web Vitals<\/li>\n<li>Improved: Full view focus restoration for accessibility<\/li>\n<li>Improved: Skeleton loading animation made more subtle<\/li>\n<\/ul>\n\n<h4>2.0.5<\/h4>\n\n<ul>\n<li>Fixed translations not working: bundled .mo now loads via load_textdomain() before WP.org JIT translations can override with incomplete data<\/li>\n<li>\"Show all X photos\" button now correctly displays in German (and other languages)<\/li>\n<\/ul>\n\n<h4>2.0.4<\/h4>\n\n<ul>\n<li>Regenerated .pot file with all translatable strings (was outdated from v1.0.1)<\/li>\n<li>Fixed \"Show all X photos\" button not translatable (string was missing from .pot)<\/li>\n<li>Fixed \"photo\/photos\" plural form not translatable (missing from .pot)<\/li>\n<li>Fixed lightbox strings (Close, Share, Previous\/Next) not translatable (missing from .pot)<\/li>\n<li>Completed 100% German (de_DE + de_DE_formal) translations for all 214 strings<\/li>\n<li>Added translations for all page builder modules (Elementor, Divi, Beaver Builder, Bricks)<\/li>\n<\/ul>\n\n<h4>2.0.3<\/h4>\n\n<ul>\n<li>Fixed mobile slider pagination dots jumping when clicking through slides<\/li>\n<li>Fixed back-to-grid button positioned in center of modal instead of at navigation<\/li>\n<li>Reduced excessive gap between category navigation and first category section<\/li>\n<li>Fixed show_image_count setting still showing count when disabled (default changed to false)<\/li>\n<li>Added German formal (de_DE_formal) translation files<\/li>\n<li>Smooth dot visibility transitions instead of abrupt display:none jumps<\/li>\n<\/ul>\n\n<h4>2.0.2<\/h4>\n\n<ul>\n<li>Fixed category navigation no longer scrolls sticky with page<\/li>\n<li>Fixed show_image_count setting being ignored when unchecked<\/li>\n<li>Fixed all checkbox settings not saving correctly when unchecked<\/li>\n<li>Fixed German translations not loading (enabled load_plugin_textdomain)<\/li>\n<li>Added German translations for plural photo\/photos, settings descriptions, and lightbox strings<\/li>\n<li>Fixed grid images not filling full height (picture element + wrapper height)<\/li>\n<li>Fixed hover removing rounded borders on grid images<\/li>\n<li>Added black border to slider pagination dots for better visibility<\/li>\n<li>Slider pagination now shows max 5 dots with sliding window navigation<\/li>\n<li>Updated settings description to remove outdated PhotoSwipe reference<\/li>\n<li>Regenerated .mo translation file<\/li>\n<\/ul>\n\n<h4>2.0.1<\/h4>\n\n<ul>\n<li>Fixed critical SyntaxError caused by ES module export statement<\/li>\n<li>Fixed grid image display issues<\/li>\n<li>Fixed button icon alignment<\/li>\n<li>Added proper version bumping for WordPress update detection<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li><strong>Major Performance Rewrite<\/strong>: Removed all third-party libraries<\/li>\n<li>Replaced Swiper.js (151KB) with custom CSS scroll-snap slider (~2KB)<\/li>\n<li>Replaced PhotoSwipe (68KB) with custom lightweight lightbox (~4KB)<\/li>\n<li>Removed jQuery dependency \u2014 zero external dependencies<\/li>\n<li>Frontend JS reduced from 246KB to 26KB (\u221289%)<\/li>\n<li>Frontend CSS reduced from 41KB to 20KB (\u221251%)<\/li>\n<li>HTTP requests reduced from 6 files to 2 files<\/li>\n<li>Optimized PHP: deduplicated WebP logic, reduced per-image overhead<\/li>\n<li>Optimized Icon.png from 1.1MB to 44KB<\/li>\n<li>Uses O(1) associative array for image deduplication instead of in_array()<\/li>\n<li>Single wp_upload_dir() call per render instead of per-image<\/li>\n<li>Custom lightbox features: pinch-to-zoom, swipe nav, wheel zoom, double-click zoom, preloading, Web Share API<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>WordPress 6.9 compatibility with Gutenberg Block API v3<\/li>\n<li>Added extended shortcode parameters: show_title, title_tag, layout, columns, gap, border_radius, lightbox, sharing, virtual_tour<\/li>\n<li>Added new layout options: hero-grid, standard grid, and masonry<\/li>\n<li>Added virtual tour button integration<\/li>\n<li>Added comprehensive hooks and filters system for developers<\/li>\n<li>Added Display Defaults settings section (layout, columns, gap, border radius, lightbox, sharing)<\/li>\n<li>Added Branding settings section (button text, colors, accent color)<\/li>\n<li>Added skeleton loading animation for images<\/li>\n<li>Added blur-up image loading effect<\/li>\n<li>Added sticky category navigation in fullscreen view<\/li>\n<li>Added social sharing functionality in lightbox (Web Share API with fallback)<\/li>\n<li>Added deep linking support for lightbox images (shareable URLs)<\/li>\n<li>Added extended keyboard shortcuts (F to open, G to close, Home\/End for navigation)<\/li>\n<li>Updated Elementor widget with layout, columns, features, and virtual tour controls<\/li>\n<li>Updated Divi module with layout, columns, lightbox, sharing, and virtual tour options<\/li>\n<li>Updated Beaver Builder module with full feature parity<\/li>\n<li>Improved Bricks Builder integration with extended controls<\/li>\n<li>Fixed Bricks Builder labels (internationalization)<\/li>\n<li>Improved accessibility with focus states<\/li>\n<li>Performance optimizations with CSS custom properties<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Updated all original strings to en_US for Polyglots compliance<\/li>\n<li>Synced localization files and builder labels<\/li>\n<li>Prepared release assets for WordPress.org distribution<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Hero grid layout with 5 configurable images<\/li>\n<li>Category-based gallery organization<\/li>\n<li>Mobile-optimized Swiper slider<\/li>\n<li>PhotoSwipe lightbox integration<\/li>\n<li>Automatic WebP conversion<\/li>\n<li>Comprehensive plugin settings<\/li>\n<li>Drag &amp; drop admin interface<\/li>\n<li>Full internationalization<\/li>\n<li>Performance optimizations<\/li>\n<\/ul>","raw_excerpt":"Premium gallery with customizable hero grid, WebP optimization and immersive fullscreen view for modern websites.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/253246","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=253246"}],"author":[{"embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/jajasolutions"}],"wp:attachment":[{"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=253246"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=253246"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=253246"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=253246"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=253246"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=253246"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}