| 开发者 | maikunari |
|---|---|
| 更新时间 | 2026年10月10日 14:20 |
| 捐献地址: | 去捐款 |
| PHP版本: | 7.4 及以上 |
| WordPress版本: | 7.1 |
| 版权: | GPLv2 or later |
| 版权网址: | 版权信息 |
[sppfw_product_spin] shortcode, an extra product tab, a section below the product summary, or as the first gallery slide (the theme keeps thumbnails, zoom, and lightbox). Shop and category pages can show a small 360° badge on products that have frames — the viewer itself is not loaded on archives.
Key Features
wp-content/uploads/uploads/product-spins/product-{id}/[sppfw_product_spin] into any page or product description.sonicpixel-product-spin folder to /wp-content/plugins/.No. The gallery is never swapped out for a custom viewer. First gallery slide inserts the spin as an extra first slide and leaves the theme’s thumbnails, lightbox, zoom, and variation-image swapping in place. If the theme does not use the standard WooCommerce gallery container, that placement falls back to below the product summary instead of rendering nothing.
No. Archives show a small 360° badge on products that have frames. The viewer CSS and JavaScript are not enqueued on shop or category pages. Turn the badge off under WooCommerce → Settings → Products if every product has a spin.
In your site’s media library, as normal attachments. The plugin stores attachment IDs in product meta and resolves URLs at render time. Nothing is hosted by a third party.
Any count of two or more will spin fully — one drag across the viewer maps to the whole set. 24 frames is the practical minimum so motion does not feel steppy; 36 is the industry-standard sweet spot; 72 is very smooth but doubles the payload.
Tab, below-summary, and shortcode work as long as the theme does not strip shortcodes or WooCommerce tab filters. First-gallery-slide placement targets .woocommerce-product-gallery. Storefront and Astra keep the classic FlexSlider wrapper, so the spin is a real first slide with a 360° thumbnail badge. Blocksy keeps the gallery container but rebuilds slides in its own Flexy slider from attachment IDs — the spin is shown above that slider in the gallery column rather than as a Flexy slide. A bespoke product template that does not output the container, or that does not run woocommerce_single_product_image_thumbnail_html, gets the below-summary fallback.
No. Viewer CSS and JavaScript enqueue only when a spin is actually rendered (product with a placement, or a page that contains the shortcode). Catalog pages load only a tiny badge stylesheet, and only when the badge is enabled.
Yes. Placement only controls the automatic product-page output. [sppfw_product_spin] always works when the product has frames.
By default they are hidden from the general library and from the media modal, except inside this plugin’s own frame picker. A Spin frames filter on the Media Library lists them on purpose. This can be disabled with the psfw_hide_frames_from_library filter.
v1 attaches one spin per product, not per variation.
Yes. The plugin declares HPOS compatibility. It does not read or write orders.
changelog.txt.
1.2.5
sonicpixel-product-spin) at the plugin review team's request. The plugin folder and main file are now sonicpixel-product-spin/sonicpixel-product-spin.php and the text domain is sonicpixel-product-spin. Sites running the old Product Spin for WooCommerce: deactivate it, activate the renamed plugin (both cannot be active together), then remove the old product-spin-for-woocommerce folder with FTP or a file manager. Do not use Plugins → Delete on the old plugin: its uninstall deletes the spin frames and settings the renamed plugin uses. Frame data and settings otherwise carry over.[sppfw_product_spin]; the unprefixed [product_spin] is no longer registered. Replace it in any page or product description that used it.sppfw-product-spin, sppfw-product-spin-archive).Tested up to: 7.1 and WC tested up to: 11.1 — re-verified with the repo's own 57-check Playwright suite on WP 7.1.2 + WooCommerce 11.1.2, WP_DEBUG on, zero PHP notices.Plugin URI header. It duplicated the Author URI, and wordpress.org requires a URI unique to the plugin.Domain Path header and load_plugin_textdomain() call; translations load automatically for wordpress.org-hosted plugins since WP 4.6.$psfw_site_ids, $psfw_site_id) and swapped its direct $wpdb->delete() call for core's delete_post_meta_by_key().post__not_in query arg in favor of skipping the excepted product inside the results loop.icon-128x128.png / icon-256x256.png, derived from the existing banner ribbon art.{product-slug} wording in the readme and an admin docblock; uploads have gone to product-{id} since 1.1.1.data-*, so a theme calling PSFW_Render::markup() with caller-controlled arguments cannot inject an event handler attribute.