Fix: ship files that were missing from the 3.6.0 build — class-pim-link.php (the “Open in Skwirrel” deep-link implementation), the updated class-admin-settings.php (Settings-saved notice + transient-based test result), the updated class-product-sync-meta-box.php (PIM link button), the assets/s.png button icon, and the corresponding .po/.mo translation updates. Without these files an install of 3.6.0 fatalled on activation with “Failed opening required … class-pim-link.php”
3.6.0
“Open in Skwirrel” deep-link — Skwirrel meta box on the product edit screen and each row on the WP Products list now offer a button that jumps straight to the matching product in the Skwirrel PIM web UI. The link uses the host from the JSON-RPC endpoint. Simple products use /catalogue/products/edit/{product_id}; variable/grouped product shells use /catalogue/grouped-products/edit/{grouped_id}.
“Settings saved” notice on the settings page — saving settings now shows a proper confirmation. The connection test result moved to a transient so it no longer re-displays after every save (previously a stale ?test=ok URL parameter caused the test-success notice to fire on save).
New skwirrel_wc_sync_after_attributes_fetched action hook — fires during the attributes phase right after a product’s enriched payload (with _etim and _custom_classes) is fetched and before the WooCommerce attribute table is written. Enables site-specific code to persist the enriched payload as post meta for custom frontend rendering. Hook signature: do_action( ‘skwirrel_wc_sync_after_attributes_fetched’, int $wc_id, array $attr_product, ?array $group_info ). Fires in both the bulk Phase 3 loop and the single grouped product re-sync path
Fix: variation filter values no longer empty during sync — pre-sync rebuild of the variable product shell wiped the parent’s term-options to [] for the entire duration of the sync, leaving the frontend variation filter (storage, color, connectivity, etc.) empty until the sync finished. The shell-rebuild now preserves existing term-options for each axis taxonomy
flush_parent_attribute_terms() is now authoritative — at the end of Phase 3 the parent’s variation taxonomy term-list is rebuilt as exactly the set of term IDs whose slugs appear in the current children’s attribute_pa_* post meta. Stale terms from removed variants are dropped (previously merged in indefinitely); new terms from added or updated variants are picked up. Replaces the previous merge-on-merge pattern with a single derived-from-children compute
3.4.0
Live sync log viewer on the Debug page — tails the current sync log file with 2-second polling, auto-scroll, pause/clear/download controls
“View live log” anchor link on the in-progress sync banner jumps straight to the live log
Active log filename now tracked in a WP option so the viewer follows sync runs across page refreshes
Dashboard Debug block relabelled to surface the live log alongside variation attribute troubleshooting
CI actions bumped to Node 24 — checkout/cache/upload-artifact/github-script
3.3.0
Log viewer performance — progressive rendering (200 lines/frame), chunked server loading (100 KB/request), and download button
API Response meta box for grouped products — collapsible JSON display with syntax highlighting
Lazy-loaded variation API responses via AJAX with individual collapsible sections
Single grouped product sync — “Sync this product” button now works for variable/grouped products
Grouped product ID stored as variation meta for direct group membership lookup
Price fix: “Prices managed outside Skwirrel” now also protects simple product prices (previously only variations)
Quick-scroll link from Skwirrel sidebar meta box to API response section
3.2.2
New “Prices managed outside Skwirrel” setting — when enabled, the PIM sync no longer overwrites existing variation prices with 0 when the PIM payload contains no price. Use this when prices are synced from a separate system (e.g. ERP).
3.2.1
Single-variant groups synced as simple products instead of variable products
Custom features as variation axes alongside ETIM features
Custom feature matching by ID with translated labels
Attribute label auto-update for numeric and cc_ prefixed labels
No duplicate attributes for custom feature variation axes
Phase 3 custom class fetch when grouped products enabled
3.2.0
Custom class collection ID — new required setting for product fetching
Custom classes included in bulk product fetch
Text features (type T) now stored as product attributes
Fix product sync failing when downloadable files are not in WooCommerce’s approved directory
Downloads/documents errors no longer block category, brand and manufacturer assignment
1.9.5
Brand sync always active (uses WooCommerce native product_brand taxonomy)
Add “Sync manufacturers” setting with product_manufacturer taxonomy
Default product list columns: hide Tags, show Manufacturers
Add “Filter by manufacturer” dropdown on product list page
Manufacturers column ordered after Brands, before Date
1.9.3
Fix variable product variation attributes: recover parent attribute options from child variation post meta when deferred terms are empty
Convert non-variation parent attributes to global WooCommerce taxonomy-based attributes
Fix brand not assigned to variable products: propagate brand from child variations to parent
Fix categories not assigned to variable products: propagate categories from child variations to parent
1.9.2
Remove legacy pa_variant migration code (no live installs to migrate)
Fix simple product attributes: save as global WooCommerce taxonomy-based attributes instead of custom text attributes, so they appear in layered navigation and product filters
Move remaining inline event handlers (onchange, onclick) to enqueued inline script for WordPress.org compliance
Fix stale debug log path in admin help text
1.8.4
Add non-variation ETIM and custom class attributes to parent variable products during sync
1.8.3
Fix empty variation attribute dropdowns on variable products by deferring parent attribute term updates to a single batch flush after all variations are processed
1.8.2
Replace all inline <script> and <style> tags with proper wp_enqueue_script/wp_add_inline_script/wp_add_inline_style calls
Rename plugin display name to “Skwirrel PIM sync for WooCommerce”
1.8.1
Fix variation attribute labels showing raw ETIM codes (e.g. “EF002671”) instead of human-readable names
Add missing include_etim_translations and include_languages to getGroupedProducts API call
1.8.0
Rename plugin slug from skwirrel-pim-wp-sync to skwirrel-pim-sync (WordPress.org restricts “wp” in plugin slugs)
Update text domain, Action Scheduler group, logger source, and admin page slug
Rename main plugin file and all language files to match new slug
Add activation cleanup for old Action Scheduler group from pre-1.8.0
Existing settings, synced products, and translations are fully preserved