{"id":339013,"date":"2026-07-14T12:03:17","date_gmt":"2026-07-14T12:03:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/sazkit-product-gallery-for-woocommerce\/"},"modified":"2026-07-14T12:02:40","modified_gmt":"2026-07-14T12:02:40","slug":"sazkit-product-gallery-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/sazkit-product-gallery-for-woocommerce\/","author":20991612,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.6","stable_tag":"1.0.6","tested":"7.0.1","requires":"6.2","requires_php":"8.0","requires_plugins":null,"header_name":"SazKit \u2013 Product Gallery for WooCommerce","header_author":"SazKit","header_description":"Replaces the default WooCommerce single product gallery with a Swiper slider (arrows + dots, optional synced thumbnail nav). Uses the site's Swiper assets if present, otherwise loads its own bundled copy.","assets_banners_color":"faf9fd","last_updated":"2026-07-14 12:02:40","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/profiles.wordpress.org\/sazzad23\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":30,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.6":{"tag":"1.0.6","author":"sazzad23","date":"2026-07-14 12:02:40"}},"upgrade_notice":{"1.0.6":"<p>Plugin folder\/file renamed to match the WordPress.org-assigned slug (sazkit-product-gallery-for-woocommerce). If installing manually rather than through the directory, make sure the old sazkit-gallery folder is removed first.<\/p>","1.0.5":"<p>Removes the Custom CSS field (WordPress.org policy) and fixes a class-naming inconsistency flagged in plugin review. If you had Custom CSS saved, back it up before updating \u2014 it will no longer be applied after this update.<\/p>","1.0.4":"<p>Changes the plugin&#039;s Text Domain to sazkit-product-gallery-for-woocommerce; translators will need updated .po\/.mo files.<\/p>","1.0.3":"<p>Fixes arrow icons still losing their position on themes whose own CSS uses !important with a highly specific selector.<\/p>","1.0.2":"<p>Hardens the gallery&#039;s CSS against theme interference more broadly (layout, images, arrows, dots, thumbnails, lightbox), beyond just the arrow icons in 1.0.1.<\/p>","1.0.1":"<p>Fixes arrow icons disappearing on some themes at narrower viewport widths.<\/p>","1.0.0":"<p>Initial public release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3607412,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3607412,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3607412,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3607412,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.6"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3607412,"resolution":"1","location":"assets","locale":"","width":1920,"height":1080},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3607412,"resolution":"2","location":"assets","locale":"","width":1920,"height":1316}},"screenshots":{"1":"Main product slider with arrow and dot navigation.","2":"Plugin settings screen."}},"plugin_section":[],"plugin_tags":[786,18250,611,71207,286],"plugin_category":[45,50],"plugin_contributors":[271485],"plugin_business_model":[],"class_list":["post-339013","plugin","type-plugin","status-publish","hentry","plugin_tags-carousel","plugin_tags-product-gallery","plugin_tags-slider","plugin_tags-swiper","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_category-media","plugin_contributors-sazzad23","plugin_committers-sazzad23"],"banners":{"banner":"https:\/\/ps.w.org\/sazkit-product-gallery-for-woocommerce\/assets\/banner-772x250.png?rev=3607412","banner_2x":"https:\/\/ps.w.org\/sazkit-product-gallery-for-woocommerce\/assets\/banner-1544x500.png?rev=3607412","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/sazkit-product-gallery-for-woocommerce\/assets\/icon-128x128.png?rev=3607412","icon_2x":"https:\/\/ps.w.org\/sazkit-product-gallery-for-woocommerce\/assets\/icon-256x256.png?rev=3607412","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/sazkit-product-gallery-for-woocommerce\/assets\/screenshot-1.png?rev=3607412","caption":"Main product slider with arrow and dot navigation."},{"src":"https:\/\/ps.w.org\/sazkit-product-gallery-for-woocommerce\/assets\/screenshot-2.png?rev=3607412","caption":"Plugin settings screen."}],"raw_content":"<!--section=description-->\n<p>SazKit \u2013 Product Gallery for WooCommerce swaps the default WooCommerce single-product image gallery (FlexSlider + zoom) for a clean <a href=\"https:\/\/swiperjs.com\">Swiper<\/a> slider.<\/p>\n\n<p>Features:<\/p>\n\n<ul>\n<li>Main slider with arrow and dot navigation, fade transition, and adaptive height.<\/li>\n<li>Optional synced thumbnail navigation slider below the main image.<\/li>\n<li>Full-screen lightbox with keyboard navigation, focus trapping, and click-to-magnify.<\/li>\n<li>Hover zoom (inner magnify) on the main image for desktop pointers.<\/li>\n<li>Configurable gallery height \u2014 a fixed pixel height (default 550px) that scales images down and centers them, or auto height that fits each image.<\/li>\n<li>Image fit for fixed-height mode \u2014 Contain (show the whole image) or Cover (fill and crop edge-to-edge).<\/li>\n<li>Configurable thumbnail count (1\u201310 visible at once).<\/li>\n<li>Toggle arrows and dots independently on the main slider.<\/li>\n<li>Optional arrows on the thumbnail slider.<\/li>\n<li>Autoplay for the main slider with a configurable interval (pauses on hover\/focus).<\/li>\n<li>Tabbed settings screen: General and Style.<\/li>\n<li>Style tab: pick the arrow color and dot color with the native color picker.<\/li>\n<li>Variation support \u2014 the main image updates when a variation with its own image is selected.<\/li>\n<li>RTL aware.<\/li>\n<li>Uses your site's existing Swiper assets if a theme or another plugin already registers them; otherwise it loads its own bundled copy.<\/li>\n<li>HPOS (High-Performance Order Storage) compatible.<\/li>\n<li>Developer friendly: filter hooks for the image IDs, image sizes, and Swiper arguments.<\/li>\n<\/ul>\n\n<h4>Filter hooks<\/h4>\n\n<ul>\n<li><code>sazkit_settings<\/code> \u2014 filter merged plugin settings at runtime.<\/li>\n<li><code>sazkit_gallery_image_ids<\/code> \u2014 filter the attachment IDs used in the gallery.<\/li>\n<li><code>sazkit_main_image_size<\/code> \/ <code>sazkit_thumb_image_size<\/code> \u2014 filter the registered image sizes.<\/li>\n<li><code>sazkit_swiper_main_args<\/code> \/ <code>sazkit_swiper_thumbs_args<\/code> \u2014 filter the Swiper configuration.<\/li>\n<li><code>sazkit_swiper_handles<\/code> \u2014 override the detected Swiper script\/style handles.<\/li>\n<li><code>sazkit_zoom_level<\/code> \u2014 filter the hover-zoom magnification factor (default <code>2.0<\/code>).<\/li>\n<li><code>sazkit_slide_badges<\/code> \u2014 filter to add badge overlays (e.g. Sale\/New ribbons) to a gallery slide.<\/li>\n<li><code>sazkit_before_main_slides<\/code> \/ <code>sazkit_after_main_slides<\/code> \u2014 actions for add-ons to inject extra <code>.sazkit-slide<\/code> elements (e.g. video) into the main slider.<\/li>\n<li><code>sazkit_before_thumb_slides<\/code> \/ <code>sazkit_after_thumb_slides<\/code> \u2014 matching actions for the thumbnail slider, to keep both sliders' indexes in sync.<\/li>\n<li><code>sazkit_gallery_wrapper_classes<\/code> \u2014 filter to add extra classes to the gallery wrapper (e.g. add-on layout classes).<\/li>\n<li><code>sazkit_disable_main_slider<\/code> \u2014 filter to skip Swiper initialization entirely, for add-ons rendering their own layout (e.g. a grid).<\/li>\n<li><code>sazkit_main_image_attrs<\/code> \/ <code>sazkit_thumb_image_attrs<\/code> \u2014 filter the <code>&lt;img&gt;<\/code> attributes per slide (e.g. lazy-loading control).<\/li>\n<li><p><code>sazkit_main_image_html<\/code> \/ <code>sazkit_thumb_image_html<\/code> \u2014 filter the final <code>&lt;img&gt;<\/code> HTML per slide (e.g. to wrap it in a <code>&lt;picture&gt;<\/code> element for WebP\/AVIF).<\/p>\n\n<p>render_gallery_for_product( WC_Product $product ) and <code>enqueue_gallery_assets()<\/code> are public methods add-ons can call directly to render\/enqueue the gallery for an arbitrary product outside the single product page (e.g. a shortcode or block).<\/p><\/li>\n<li><p><code>sazkit_settings_nav_tabs<\/code> \u2014 action to add extra tab links to the settings page's nav (so an add-on doesn't need its own separate admin menu item).<\/p><\/li>\n<li><code>sazkit_settings_panels<\/code> \u2014 action to render extra tab panel(s) inside the settings card, after the built-in General\/Style tabs' own <code>&lt;form&gt;<\/code> closes. Forms can't nest, so add-on panels needing to save fields must wrap themselves in their own <code>&lt;form&gt;<\/code> with their own save button \u2014 the built-in Cancel\/Save changes footer only submits the General\/Style tab and hides itself automatically while a non-native tab is active. Panels should use the same <code>.sazkit-tab-panel<\/code> \/ <code>#sazkit-tab-{slug}<\/code> markup convention as the built-in tabs so the shared tab-switching JS shows\/hides them correctly.<\/li>\n<\/ul>\n\n<p>The gallery wrapper also fires two jQuery events add-ons can listen for: <code>sazkit:zoom<\/code> (hover zoom activated on a slide) and <code>sazkit:lightbox-open<\/code> (the lightbox opened for a slide), both passed the attachment ID.<\/p>\n\n<h3>Third-Party Libraries<\/h3>\n\n<p>This plugin bundles the Swiper library (v11.2.10) by Vladimir Kharlampidi, licensed under the MIT license. See https:\/\/swiperjs.com.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>sazkit-gallery<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install it through the Plugins screen in WordPress.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> screen.<\/li>\n<li>Make sure WooCommerce is active.<\/li>\n<li>Visit <strong>Settings \u2192 SazKit Gallery<\/strong> to configure the gallery under the <strong>General<\/strong> and <strong>Style<\/strong> tabs.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20require%20woocommerce%3F\"><h3>Does this require WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. WooCommerce 8.0 or newer must be active. The plugin does nothing on its own.<\/p><\/dd>\n<dt id=\"is%20it%20compatible%20with%20variable%20products%3F\"><h3>Is it compatible with variable products?<\/h3><\/dt>\n<dd><p>Yes. When a variation with its own image is selected, the first slide updates to that image and returns to the original when the selection is reset.<\/p><\/dd>\n<dt id=\"is%20it%20multilingual%20%2F%20wpml%20ready%3F\"><h3>Is it multilingual \/ WPML ready?<\/h3><\/dt>\n<dd><p>Yes. All plugin strings are internationalized, and a translation template (<code>languages\/sazkit-gallery.pot<\/code>) is included. Product images and titles themselves are WooCommerce data, so WPML\/Polylang translate them automatically \u2014 no extra configuration is required.<\/p><\/dd>\n<dt id=\"can%20i%20keep%20my%20theme%27s%20swiper%20version%3F\"><h3>Can I keep my theme's Swiper version?<\/h3><\/dt>\n<dd><p>Yes. If your theme or another plugin already registers a Swiper script\/style handle, this plugin uses it instead of loading a second copy.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>Renamed the plugin folder and main file to match the slug assigned by WordPress.org during review (<code>sazkit-product-gallery-for-woocommerce<\/code>), resolving a Text-Domain\/slug mismatch flagged by Plugin Check. The Text Domain and all translation strings now correctly match the assigned slug. Also removed a stray <code>.claude<\/code> directory (an AI-assistant config folder) that had been flagged as not belonging in a production plugin.<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Removed the Custom CSS field from the Style tab. Per the WordPress.org plugin review team's policy against plugins accepting arbitrary user-supplied CSS\/JS\/PHP for output, the free-form textarea (previously piped straight into <code>wp_add_inline_style<\/code>) has been removed entirely. The Style tab still offers the arrow\/dot color pickers.<\/li>\n<li>Renamed the main class from <code>SazKit_Gallery<\/code> to <code>Sazkit_Gallery<\/code> to resolve a plugin-review prefix-consistency flag (the capitalized \"K\" didn't match the lowercase <code>sazkit_<\/code> prefix used everywhere else \u2014 hook names, filters, the option key). No functional change; only affects code that referenced the class name directly (e.g. the Pro add-on, updated to match).<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Changed the Text Domain to <code>sazkit-product-gallery-for-woocommerce<\/code> (was <code>sazkit-gallery<\/code>) and updated every translation string to match. The admin menu slug, enqueued script\/style handles, and the <code>.sazkit-gallery<\/code> CSS class are unchanged \u2014 only the translation domain moved.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Fixed the arrow icons still losing their <code>position<\/code> to a theme's own <code>!important<\/code> rule even after 1.0.2's hardening: when both sides declare a property <code>!important<\/code>, it comes down to plain specificity, and a theme selector like <code>button:not(.fa):not(.close-style)::before<\/code> out-specifies a doubled class. The affected rules (main\/thumbnail\/lightbox arrow icons) now triple the class instead of doubling it, which reliably exceeds that kind of theme selector regardless of load order.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Hardened the gallery's structural CSS (layout, image sizing, arrows, dots, thumbnails, and the lightbox overlay) with <code>!important<\/code> on every property that would visibly break if a theme's own generic styling overrode it \u2014 not just the arrow icons fixed in 1.0.1. Purely cosmetic details are left as-is; this only covers things that would otherwise stop working correctly.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Fixed the main\/thumbnail\/lightbox arrow icons becoming invisible or mispositioned on some themes at narrower viewport widths (seen with a Divi-style button \"shine\" hover effect that repurposes every <code>&lt;button&gt;<\/code> element's <code>::before<\/code>\/<code>::after<\/code> for its own decorative overlay below ~991px). The arrow icons' properties are now set with <code>!important<\/code> throughout to guarantee they win regardless of what a theme's generic button styling does.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial public release.<\/li>\n<\/ul>","raw_excerpt":"Replaces the default WooCommerce single-product gallery with a Swiper slider \u2014 arrows, dots, and an optional synced thumbnail navigation.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/339013","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=339013"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/sazzad23"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=339013"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=339013"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=339013"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=339013"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=339013"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=339013"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}