{"id":352804,"date":"2026-08-18T06:25:48","date_gmt":"2026-08-18T06:25:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/gridxflex-gallery\/"},"modified":"2026-08-18T11:35:14","modified_gmt":"2026-08-18T11:35:14","slug":"sab-photo-gallery","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/sab-photo-gallery\/","author":21050307,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.0","stable_tag":"1.1.0","tested":"7.0.4","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"SAB Photo Gallery","header_author":"Shahriar Ahmed Biddut","header_description":"Drag-and-drop grid builder for photo galleries, plus a Masonry preset layout.","assets_banners_color":"41558b","last_updated":"2026-08-18 11:35:14","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/buymeacoffee.com\/shahriarabiddut","header_plugin_uri":"https:\/\/github.com\/shahriarabiddut\/sab-photo-gallery","header_author_uri":"https:\/\/github.com\/shahriarabiddut","rating":0,"author_block_rating":0,"active_installs":0,"downloads":39,"num_ratings":0,"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":"shahriarabiddut","date":"2026-08-18 06:25:33"},"1.1.0":{"tag":"1.1.0","author":"shahriarabiddut","date":"2026-08-18 11:35:14"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3652704,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3652704,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3652704,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3652704,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"sab-photo-gallery\/gallery":{"name":"sab-photo-gallery\/gallery","title":"SAB Photo Gallery"}},"tagged_versions":["1.0.0","1.1.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3652109,"resolution":"1","location":"assets","locale":"","width":1687,"height":816},"screenshot-10.png":{"filename":"screenshot-10.png","revision":3652704,"resolution":"10","location":"assets","locale":"","width":1666,"height":796},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3652109,"resolution":"2","location":"assets","locale":"","width":1900,"height":807},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3652109,"resolution":"3","location":"assets","locale":"","width":1847,"height":816},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3652109,"resolution":"4","location":"assets","locale":"","width":1281,"height":659},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3652109,"resolution":"5","location":"assets","locale":"","width":1295,"height":455},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3652109,"resolution":"6","location":"assets","locale":"","width":1398,"height":777},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3652109,"resolution":"7","location":"assets","locale":"","width":1279,"height":261},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3652109,"resolution":"8","location":"assets","locale":"","width":1915,"height":783},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3652109,"resolution":"9","location":"assets","locale":"","width":1271,"height":810}},"screenshots":{"1":"The drag-and-drop Custom Grid builder \u2014 reposition and resize images directly on the canvas.","2":"Custom Grid View on Frontend.","3":"Add images in gallery at Start or End.","4":"Gallery Settings : Layout Designs","5":"Gallery Settings : Config Controls","6":"Gallery Settings : Design Controls","7":"Gallery Revisions","8":"The SAB Photo Gallery block in the editor, with a live preview.","9":"The General Settings screen with sitewide defaults.","10":"Copy, Cut, and Paste for images in the Custom Grid builder."}},"plugin_section":[],"plugin_tags":[210,6040,148076,6822,649],"plugin_category":[50],"plugin_contributors":[256077],"plugin_business_model":[],"class_list":["post-352804","plugin","type-plugin","status-publish","hentry","plugin_tags-gallery","plugin_tags-grid","plugin_tags-gutenberg","plugin_tags-masonry","plugin_tags-photo-gallery","plugin_category-media","plugin_contributors-shahriarabiddut","plugin_committers-shahriarabiddut"],"banners":{"banner":"https:\/\/ps.w.org\/sab-photo-gallery\/assets\/banner-772x250.png?rev=3652704","banner_2x":"https:\/\/ps.w.org\/sab-photo-gallery\/assets\/banner-1544x500.png?rev=3652704","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/sab-photo-gallery\/assets\/icon-128x128.png?rev=3652704","icon_2x":"https:\/\/ps.w.org\/sab-photo-gallery\/assets\/icon-256x256.png?rev=3652704","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/sab-photo-gallery\/assets\/screenshot-1.png?rev=3652109","caption":"The drag-and-drop Custom Grid builder \u2014 reposition and resize images directly on the canvas."},{"src":"https:\/\/ps.w.org\/sab-photo-gallery\/assets\/screenshot-2.png?rev=3652109","caption":"Custom Grid View on Frontend."},{"src":"https:\/\/ps.w.org\/sab-photo-gallery\/assets\/screenshot-3.png?rev=3652109","caption":"Add images in gallery at Start or End."},{"src":"https:\/\/ps.w.org\/sab-photo-gallery\/assets\/screenshot-4.png?rev=3652109","caption":"Gallery Settings : Layout Designs"},{"src":"https:\/\/ps.w.org\/sab-photo-gallery\/assets\/screenshot-5.png?rev=3652109","caption":"Gallery Settings : Config Controls"},{"src":"https:\/\/ps.w.org\/sab-photo-gallery\/assets\/screenshot-6.png?rev=3652109","caption":"Gallery Settings : Design Controls"},{"src":"https:\/\/ps.w.org\/sab-photo-gallery\/assets\/screenshot-7.png?rev=3652109","caption":"Gallery Revisions"},{"src":"https:\/\/ps.w.org\/sab-photo-gallery\/assets\/screenshot-8.png?rev=3652109","caption":"The SAB Photo Gallery block in the editor, with a live preview."},{"src":"https:\/\/ps.w.org\/sab-photo-gallery\/assets\/screenshot-9.png?rev=3652109","caption":"The General Settings screen with sitewide defaults."},{"src":"https:\/\/ps.w.org\/sab-photo-gallery\/assets\/screenshot-10.png?rev=3652704","caption":"Copy, Cut, and Paste for images in the Custom Grid builder."}],"raw_content":"<!--section=description-->\n<p>Build a gallery, drag images into a custom grid, embed it via shortcode or block. No coding required.<\/p>\n\n<p>Every gallery is its own WordPress post behind the scenes (a <code>sab_photo_gallery<\/code>), so it gets its own title, its own admin list screen, standard WordPress edit\/delete permissions, and native WordPress revisions \u2014 the Compare Revisions screen shows a readable, line-by-line diff of the gallery's images and settings, not just the title.<\/p>\n\n<p>Gallery types in this version:<\/p>\n\n<ul>\n<li><strong>Custom Grid<\/strong> \u2014 drag to reposition, drag a corner handle to resize. Snaps to a fixed 12-column grid.<\/li>\n<li><strong>Masonry<\/strong> \u2014 auto-flowing columns, no manual positioning. Choose a Classic (CSS columns) flow or a Bento preset with a repeating mixed-tile-size pattern.<\/li>\n<\/ul>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Visual drag-and-drop builder: add images from the native Media Library, drag to reposition, resize by dragging a corner handle<\/li>\n<li>New images are auto-placed below existing content \u2014 nothing overlaps by default<\/li>\n<li>Save with a click, or with the Ctrl\/Cmd + S keyboard shortcut, from anywhere on the builder screen<\/li>\n<li>One-click copy of the gallery's <code>[sab_photo_gallery id=\"X\"]<\/code> shortcode, from the builder sidebar or the All Galleries list<\/li>\n<li>Every gallery save creates a WordPress revision, with a real content diff (not just title) on the Compare Revisions screen<\/li>\n<li>Publish\/Update buttons and admin notices (publish, update, trash, restore, etc.) are worded for galleries, not generic WordPress \"posts\"<\/li>\n<li>One rendering engine behind both the <code>[sab_photo_gallery id=\"X\"]<\/code> shortcode and the SAB Photo Gallery Gutenberg block (with a live preview in the editor), so output never drifts between the two<\/li>\n<li>Sitewide General Settings (gallery type, gutter, Custom Grid responsive behavior, Masonry columns\/style, pagination, captions, powered-by link), each overridable per gallery from the builder's Gallery Settings panel<\/li>\n<li>Per-gallery Design controls: padding\/margin per side and per breakpoint, background color, z-index<\/li>\n<li>Optional per-gallery lightbox, sized in viewport units so it scales correctly on any screen<\/li>\n<li>Configurable pagination \u2014 \"Load more\" button, infinite scroll, or numbered pages \u2014 once a gallery has more images than the configured batch size<\/li>\n<li>Multiple galleries on one page are fully isolated \u2014 each gets a unique ID and its own scoped CSS<\/li>\n<li>No frontend footprint unless a gallery is actually embedded on a page<\/li>\n<li>All plugin code (PHP classes\/functions, CSS classes, JS globals, AJAX actions, postmeta keys) is namespaced under <code>sab-photo-gallery<\/code> \/ <code>sab_photo_gallery<\/code> to avoid conflicts with other plugins<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>sab-photo-gallery<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate through the \"Plugins\" menu in WordPress.<\/li>\n<li>Go to SAB Photo Gallery &gt; Add New to build your first gallery.<\/li>\n<li>Go to SAB Photo Gallery &gt; Settings to set sitewide defaults.<\/li>\n<li>Insert it on any page via the SAB Photo Gallery block, or <code>[sab_photo_gallery id=\"X\"]<\/code>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20transmit%20any%20data%20externally%3F\"><h3>Does this plugin transmit any data externally?<\/h3><\/dt>\n<dd><p>Only reads and writes only your own site's database.<\/p><\/dd>\n<dt id=\"can%20i%20change%20settings%20for%20just%20one%20gallery%2C%20without%20affecting%20the%20others%3F\"><h3>Can I change settings for just one gallery, without affecting the others?<\/h3><\/dt>\n<dd><p>Yes. Every sitewide setting \u2014 gutter, gallery type, masonry columns\/style, pagination, captions, powered-by link, design spacing, lightbox \u2014 can be overridden per gallery from the builder's Gallery Settings panel. A gallery that hasn't overridden a setting still follows whatever the sitewide default is, so changing a sitewide default keeps applying to it.<\/p><\/dd>\n<dt id=\"does%20the%20settings%20page%20cover%20design%20and%20lightbox%20too%2C%20or%20only%20per-gallery%3F\"><h3>Does the Settings page cover Design and Lightbox too, or only per-gallery?<\/h3><\/dt>\n<dd><p>Both. The Settings screen has dedicated Design and Lightbox tabs (padding\/margin per side and breakpoint, background color, z-index, and the lightbox toggle\/size) that set the sitewide defaults, in addition to the same controls already available per gallery in the builder.<\/p><\/dd>\n<dt id=\"how%20many%20columns%20does%20the%20custom%20grid%20use%3F\"><h3>How many columns does the Custom Grid use?<\/h3><\/dt>\n<dd><p>The Custom Grid builder snaps to a fixed 12-column layout.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20add%20a%20%22powered%20by%22%20link%3F\"><h3>Does the plugin add a \"Powered by\" link?<\/h3><\/dt>\n<dd><p>No, not unless you turn it on. It's off by default; you can opt in sitewide or per gallery if you'd like to show a small \"Powered by SAB Photo Gallery\" credit under a gallery.<\/p><\/dd>\n<dt id=\"can%20i%20see%20what%20changed%20between%20gallery%20revisions%3F\"><h3>Can I see what changed between gallery revisions?<\/h3><\/dt>\n<dd><p>Yes. Because gallery content lives in postmeta rather than post content, this plugin adds a synthetic \"Gallery Content\" field to WordPress's native Compare Revisions screen, listing each image's position\/span and any per-gallery setting overrides, so a swapped or moved image shows up as a real diff.<\/p><\/dd>\n<dt id=\"where%27s%20the%20lightbox%3F\"><h3>Where's the lightbox?<\/h3><\/dt>\n<dd><p>It ships in as an optional per-gallery toggle \u2014 enable it in the builder's Gallery Settings panel and set its width\/height in viewport units.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Fix minor issue: the SAB Photo Gallery block's editor canvas preview could render Custom Grid images stretched with large gaps, out of sync with the actual frontend\/admin output \u2014 the preview's row height now stays in sync with the live column width instead of getting stuck on its initial fallback.<\/li>\n<li>New: Copy, Cut, and Paste for images in the Custom Grid builder. Click an image to select it , then use the new Actions menu (the \"...\" button next to Save Gallery) or the keyboard \u2014 Ctrl\/Cmd+C to copy, Ctrl\/Cmd+X to cut, Ctrl\/Cmd+V to paste \u2014 to place it beside the selected image (right, then left, then the first free row underneath); a Cut image is only removed once the paste actually lands somewhere.<\/li>\n<li>Fix: clicking an image in the Custom Grid builder to select it (for Copy\/Cut\/Paste) was unreliable \u2014 ordinary mouse jitter between mousedown and mouseup was being misread as a drag, so selection often silently failed to register. Selection now works consistently on a normal click.<\/li>\n<li>Fix: selecting a grid image gave almost no visible feedback \u2014 the sky-blue selection fill was too faint (18% opacity) to read as \"selected.\" Selection now shows a clearly deeper sky-blue fill, and hovering an unselected image shows a distinct, lighter sky-blue preview so the target is obvious before you click.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: Custom Grid and Masonry (Classic + Bento) gallery types.<\/li>\n<li>Drag-and-drop, resizable grid builder with auto-placement and Media Library integration.<\/li>\n<li>Native WordPress revisions for every gallery save, with a readable content diff.<\/li>\n<li><code>[sab_photo_gallery id=\"X\"]<\/code> shortcode and Gutenberg block, sharing one rendering engine.<\/li>\n<li>General settings tab with sitewide defaults and per-gallery overrides.<\/li>\n<li>Per-gallery Design (padding\/margin\/background\/z-index) and optional Lightbox.<\/li>\n<li>Configurable \"Load more\" \/ infinite scroll \/ numbered-pages pagination and \"Powered by\" credit link.<\/li>\n<\/ul>","raw_excerpt":"Drag-and-drop grid builder for photo galleries, plus a Masonry preset layout with Classic and Bento styles.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/352804","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=352804"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/shahriarabiddut"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=352804"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=352804"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=352804"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=352804"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=352804"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=352804"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}