What's New

v1.33.0 (November 5, 2026)

Changed:

  • One name for the WordPress plugin: Wash Connector. The Plugins list, the Settings menu and the settings page title said "Wash: Blog Manager", "Wash: Manager" or "Wash Settings", while the Shopify app asked you to install the "Wash Connector". It is now the Wash Connector everywhere, and "Wash: Blog Manager" is only the Shopify app. The plugin folder, settings, connection and updates are unchanged.

v1.32.0 (November 3, 2026)

Changed:

  • Rewrite Internal URLs in the Shopify app. The connection's Sync Settings tab in Wash now has the Rewrite Internal URLs switch, so links between your synced posts and pages can be configured without leaving Shopify. It is the same setting as Settings → Wash Connector → Sync Settings in WordPress, and it stays on by default. Search & Replace rules are still edited in WordPress

v1.31.1 (November 3, 2026)

Fixed:

  • One save, one sync. With Yoast SEO, ACF or other classic meta boxes in the block editor, WordPress saves a post twice: the post, then the meta box fields. Wash synced both, so the Logs listed each publish or update twice and a new translation could be created twice at once. Now a second save that sends the same content to the same store within a minute is skipped. If the meta boxes changed something, such as the SEO title, the update still goes out. "Sync to Shopify" always sends

v1.31.0 (October 29, 2026)

Safer when one WordPress site moves between Shopify stores.

Changed:

  • "This store no longer has Wash installed." When the connected store uninstalls Wash, or deactivates the connection, Settings → Wash Connector now says so and shows the connect form. Before, it kept showing a green "Connected" with a key that no longer worked. Reinstalling Wash in that store within 48 hours brings the connection back
  • Connecting the site to a different store with a connect code starts clean. The old store's sync status is cleared from every post (article IDs, blog, CDN images, redirects, last sync), so the Posts list no longer shows posts as synced to a store they aren't in. Reconnecting the same store keeps everything
  • Adding another store now needs a working primary store. Store Connections → New connection is refused while the primary store has uninstalled Wash or its key is rejected. A short outage of the Wash app never blocks this, and a dead primary store no longer pauses your other stores

v1.30.0 (October 23, 2026)

Changed:

  • Connect with a code from Shopify. In Wash in your Shopify admin, go to Connections → Add Connection and click "Generate connect code", then paste the code into Settings → Wash in WordPress. The same form adds more stores on the Business and Enterprise plans. A code works once and expires after 15 minutes
  • WordPress no longer asks for your myshopify.com address or store handle anywhere. The plugin learns the store from the code
  • The "Enter credentials manually" form is gone. The optional App URL and HTTP Basic fields for additional stores are still under "Advanced"
  • Stores that are already connected don't need to reconnect

v1.29.0 (July 7, 2026)

Added:

  • Import from Shopify (Pro and above). A new tab pulls a Shopify blog's articles into WordPress as posts, or the shop's Pages in as pages. Content, featured and inline images, file attachments and tags come across, the source blog becomes a category, and metafields are optional. With Polylang or WPML, translations come too. The import runs per connection in batches with a live progress bar
  • Imported posts stay linked to their Shopify source. Importing again updates them in place, editing one and pushing it back updates the same article, and nothing is pushed straight back to Shopify during the import itself

Fixed:

  • A batch of reliability fixes in the sync queue and image handling: concurrent or retried uploads no longer create duplicate images in Shopify, an image you replace in WordPress is uploaded again instead of the old CDN copy being served forever, and a job that fails for good now releases its usage credit and tells WordPress
  • Settings backup and restore now carries the WordPress core, Yoast, Rank Math and ACF metafield switches

v1.28.3 (July 3, 2026)

Fixed:

  • "Unpublish from Shopify" removes a post from every store it was synced to. Before, with several stores connected, it only came off the primary store and stayed live on the rest. Single-store installs are unchanged

v1.28.2 (July 1, 2026)

Fixed:

  • With two or more stores connected, a post publishes only to the stores whose blog-mapping rules it matches. Previously a store with no matching rule received the post on its first blog anyway, so a post mapped to the US store could turn up on the UK one
  • If a store's mapping rules can't be read for a moment, Wash skips that store instead of guessing where the post goes. A single store with no rules still publishes to its first blog, as before

v1.28.1 (July 1, 2026)

Fixed:

  • Blog-mapping "Market & Locale" no longer offers an invalid locale for markets without a storefront. Markets like the US or UK used to get "us" or "gb", which Shopify rejects, so their translations quietly failed to register. They now fall back to the shop's primary locale. Markets whose country code is already a valid locale, such as "fr" or "de", work exactly as before
  • On the Posts list, "View on Shopify" and "Re-sync" now agree with the green sync icon for posts synced only to an additional store
  • The sync icon links to the Shopify admin editor when a public storefront URL can't be built, so it is never a dead link
  • Manual sync reports the real result across every store rather than reading only the primary store

v1.28.0 (June 30, 2026)

Changed:

  • Each connected store now has its own complete settings. Opening a store under Settings → Wash shows the full tabbed screen (Connection, Blogs, Redirections, Hreflangs, Meta Fields, Authors, Files, Content, Search & Replace, Sync, Advanced) for that store, with its name in the heading. Changing one store never affects another, and the primary store is unchanged
  • One "Wash" menu entry, with additional stores as their own Settings submenu items. The separate Connections page is gone; a "New connection" button opens the same connect panel the primary store uses. Adding stores still needs Business or Enterprise on the primary connection

Added:

  • With more than one store enabled, the Posts list shows one status icon per store (synced, queued, failed or not synced), each linking to that store's article
  • Disabled stores show grey in the connections list and live stores green

v1.27.3 (June 28, 2026)

Fixed:

  • Bulk Publish, Re-publish and Unpublish no longer hit a 504 timeout on large batches. Posts are processed in short batches of up to 10 posts or about 20 seconds, whichever comes first, and the progress bar and final summary work as before
  • If one batch request still fails, the progress page retries it and then carries on, so a long migration finishes in one pass

v1.27.2 (June 27, 2026)

Fixed:

  • "View on Shopify" links keep the market subfolder (for example /de-ch/blogs/...) and use your real storefront domain, so localized posts no longer link to a 404
  • A post whose language matches no blog-mapping rule is flagged "No mapping" on the Posts list and is no longer published to a guessed blog. Mapping rules without a Shopify market are flagged in Settings
  • "Unpublish from Shopify" sticks: the post's synced status is cleared and auto-sync pauses, so it isn't pushed straight back
  • Bulk unpublish reports how many posts it skipped and why
  • Each post syncs to its own Shopify article. Merging several locale posts onto one article is now off by default, because under bulk sync it could leave a "synced" status with a link that 404s

v1.27.1 (June 22, 2026)

Fixed:

  • Content images were sometimes left on the WordPress site after sync, because stray output from another plugin or theme corrupted the image data and Shopify rejected it. Wash now clears that output before sending the file
  • Synced posts that still have an image served from WordPress are flagged on the Posts list instead of showing as a clean success

v1.27.0 (June 22, 2026)

Added:

  • Multi-store. Connect more than one Shopify store to a single WordPress site. Add a store through Shopify OAuth or by pasting its API key, then enable, disable or remove it. Each additional store keeps its own sync settings
  • Publishing, unpublishing and deleting reach every enabled store
  • Adding stores needs the Business or Enterprise plan. If you downgrade, the additional stores are disabled automatically
  • Existing single-store setups keep working as they are, with no migration

v1.26.9 (June 21, 2026)

Fixed:

  • Body images reliably move to the Shopify CDN instead of some staying on the WordPress host, and two cases that could serve the wrong image are fixed
  • A bulk Unpublish no longer deletes a Shopify article that is shared across locales
  • A temporary error from the app no longer marks an already-synced post as "not synced"
  • Metafields are no longer dropped during sync in some cases
  • Internal article links are rewritten by path, so they survive differences between the WordPress and Shopify domains

Added:

  • The plugin shows WordPress's standard "update available" notice and updates itself from the connected Shopify app
  • Callbacks from Shopify back to WordPress are signed and protected against replay

v1.26.8 (June 20, 2026)

Changed:

  • The "not connected" notice only appears on the post list and post editor, and you can dismiss it
  • Connecting to Shopify now checks a one-time token on the return trip, so a forged link can't overwrite your stored API key
  • Sync status for a post can only be read by users who can edit that post

v1.26.7 (May 30, 2026)

Added:

  • A "Refresh all sync statuses" button (Settings → Wash → Sync) rebuilds the synced and not-synced indicators for every published post from Shopify without syncing content again. Useful if the status dots disappear, for example after deleting and reinstalling the plugin

v1.26.6 (May 30, 2026)

Fixed:

  • Content images that referenced a resized copy of a -scaled original (for example photo-1024x785.jpg) were never moved to the Shopify CDN. Wash now finds the right attachment for them

v1.26.5 (May 30, 2026)

Added:

  • The Connection tab asks for consent before anything is sent. "Connect to Shopify" stays disabled until you tick a box that explains what content goes to the Wash app, with links to the Privacy Policy. The date you agreed is shown on the same screen

v1.26.4 (May 30, 2026)

Changed:

  • Ready for the WordPress.org Plugin Directory: the plugin is now licensed GPLv2 or later, the readme lists every external service it contacts, and the text domain is wash-blog-manager. Existing translations keep loading

v1.25.0 (May 30, 2026)

Added:

  • Rank Math FAQ blocks survive the trip to Shopify. Each FAQ is rebuilt as an accordion that Shopify's sanitizer leaves alone, with links kept, and a FAQPage JSON-LD script is added for SEO. It is on by default

v1.24.1 (May 28, 2026)

Fixed:

  • Images now sync from WordPress sites behind HTTP Basic Auth. Wash fetches each file through a signed endpoint using the connection's credentials, instead of the public uploads URL that returned 401. The fix was part of 1.24.0 but only reached production with this release

v1.23.4 (May 15, 2026)

Fixed:

  • ACF metafield sync reliability: one invalid URL field in a batch no longer drops every other metafield (Shopify's atomic mutation rolled the whole batch back). The worker now identifies the failing entries, drops them, and retries the rest once
  • ACF image fields with object payloads (URL + alt + dimensions) now sync correctly; garbage values ([object Object], bare attachment IDs) are rejected instead of being sent to Shopify
  • Stale - placeholders are no longer written to source articles when a translation arrives before its source metafield exists

v1.23.3 (May 10, 2026)

Changed:

  • Plan picker now routes to Shopify's Managed Pricing page directly (Plans link in the in-app nav, Change Plan button, and the WP plugin's upgrade link all behave consistently)
  • In-app /app/billing page removed: plan info still shows on the Dashboard

Fixed:

  • Webhook handler no longer overwrites authoritative billing-period dates with a guessed "first of next month" value
  • Plan name typos in Shopify Partner Dashboard no longer silently downgrade paying shops to FREE. Sync is skipped and logged instead

v1.23.2 (May 10, 2026)

Removed:

  • Translation Status report retired: the coverage numbers it surfaced were misleading on real shops. The underlying per-language stats endpoint stays available for future surfaces

v1.23.1 (May 9, 2026)

Fixed:

  • Multi-language tag preservation: editing a post in one language (e.g. Polish) no longer wipes tags applied to its German, Spanish, or other translations on the shared Shopify article. Resolves a Polylang/WPML regression where tags were periodically disappearing for non-source locales

Added:

  • Per-locale tag tracking via a new wash.tracked_tags article metafield so every sync merges only its own locale's tags. Tags added manually in Shopify Admin are now preserved across syncs

v1.23.0 (May 9, 2026)

Added:

  • Translation Status report: new per-connection page showing WP truth vs Synced vs Shopify totals, broken down by Global and Market-scoped locales plus WordPress categories. Includes coverage progress bars and CSV export (retired the next day; see v1.23.2)
  • WordPress /wash/v1/stats endpoint now returns per-language and per-category post counts, auto-detecting Polylang or WPML
  • Two new Grafana panels surface the same content-by-language signal on the operator dashboards

v1.22.0 (May 6, 2026)

Changed:

  • Bulk publish now shows a live progress page with a real progress bar and a cancel button instead of one long request. Migrations of 500+ posts now complete reliably without timeouts
  • Each batch runs with extended PHP time limits, so shared hosts that can't change max_execution_time are no longer a blocker
  • Settings → Sync Preferences exposes "Inline progress mode" (default on) and "Auto-clear stale sync errors" (default on)

v1.21.0 (May 4, 2026)

Added:

  • ↻ Refresh status row action on every post: calls Shopify to confirm whether the article still exists and reconciles local sync metadata. Useful for posts whose error is weeks old or whose Shopify article was deleted manually
  • Auto-clear stale sync errors: a daily WordPress cron removes the red ⚠️ icon from posts whose last sync failure is older than 30 days (retention period filterable)

Fixed:

  • Sync-failure icons (red ⚠️ for errors, blue 🕐 for translations waiting on their source) now show on every failure mode, not just one
  • Error icons only appear on currently-published posts: drafts and scheduled posts no longer inherit stale error meta from a past life
  • Bulk publish shows the spinning "queued" icon immediately on click, not only after the cron fires

v1.20.9 (May 2, 2026)

Added:

  • Blog Mappings list overhaul: rule position badges (#N), translation scope badges (🌍 Global / 📍 Market / — Primary), sortable column headers, four combined filters (Destination, Blog/Page, WP Language, Translation), live N / M counter, and Reset filters
  • Row hover, auto-scroll to form on Edit, and icon-only action buttons (✏️ Edit / 📄 Duplicate / 🗑️ Delete) with full keyboard / screen-reader labels
  • New 🌍 Global (no market) option group in the Market & Locale dropdown, which lets shops with Shopify Markets pick a shop-wide Translate & Adapt locale without binding to a market

Fixed:

  • Drag-and-drop reordering of mapping rules no longer wipes their data (priority-only updates are now sparse)
  • Editing a Global-only mapping no longer reverts the market selection to "Default"
  • Bogus "duplicate rule" and "locale without market" warnings have been removed

v1.20.6 (May 1, 2026)

Added:

  • Blog mappings now support a Global locale (no market), which sends translations to shop-wide Translate & Adapt instead of binding them to a single Shopify Market

Fixed:

  • Saved mappings no longer lose their locale / market selection (the form action handlers were dropping those fields on submit)

v1.20.5 (May 1, 2026)

Changed:

  • App Store compliance: removed the manual shop-domain field from the /auth/login fallback page so installs initiate from a Shopify-owned surface
  • Subscribed to APP_SUBSCRIPTIONS_UPDATE so local plan rows automatically reflect cancellations, expiries, and declines from Shopify

Fixed:

  • Synced pages once again carry the SEO meta title and description they had in WordPress (the field was being read but never forwarded to Shopify)

v1.20.3 (April 20, 2026)

Fixed:

  • "Connect to Shopify" no longer 404s for shops on specific custom domains. The app slug used in the connect URL is now correct

v1.19.1 (April 19, 2026)

Fixed:

  • "Blogs" tab no longer shows the red unsaved-changes dot after you save or delete a mapping rule via the AJAX buttons

v1.18.1 (April 16, 2026)

Added:

  • Bricks Builder support: Bricks-built pages now sync their actual rendered content plus the scoped CSS Bricks generates, instead of the empty post_content WordPress stores

v1.18.0 (April 16, 2026)

Added:

  • Mapping rules now have a Shopify Destination (Blog Article or Page) and a WP Post Types field, so custom post types like recipe or news can be routed to either Shopify blogs or pages independently
  • Mapping cards show destination and post-types badges at a glance

v1.17.6 (April 16, 2026)

Fixed:

  • Synced pages now appear in the internal-links search and resolve correctly in cross-content links (they used to be silently skipped due to a stale meta key)
  • Smart Redirections are now created during async (queued) sync jobs. Previously the redirect condition always failed because of a wrong option name

v1.17.4 (April 15, 2026)

Fixed:

  • WPML / Polylang / TranslatePress / Weglot are now detected only when actually active. Inactive or uninstalled plugins no longer trigger false-positive language tabs

v1.17.3 (April 15, 2026)

Fixed:

  • Image sync stops retrying images that return permanent 401/403/404/410 from WordPress, instead of looping until the queue gives up
  • Custom metafields now respect existing Shopify definition types (URL, JSON, color, number) instead of always writing plain text

v1.17.1 (April 15, 2026)

Fixed:

  • URL Redirections now strip inline # comment text from imported rules and respect the post types selected in settings (instead of always being limited to posts and pages)

v1.17.0 (April 14, 2026)

Removed:

  • Managed WordPress Hosting (MANAGED plan at $249/mo): the feature has been retired. Existing plans, sync, and content are unaffected

v1.16.0 (April 13, 2026)

Added:

  • Metafield translations: ACF, custom, and SEO metafields now appear in Shopify Translate & Adapt with per-locale values from translated WordPress posts. Definitions are created with the right translation permissions so the merchant UI handles them as multilingual

v1.15.3 (April 13, 2026)

Added:

  • Search & Replace tab (Business plan): define text-replacement rules applied to post content before it ships to Shopify. Useful for converting shortcodes to HTML, domain rewriting, or stripping unwanted attributes

v1.15.2 (April 13, 2026)

Fixed:

  • WordPress categories now sync as Shopify article tags (deduplicated, "Uncategorized" excluded)
  • Translation posts merge their tags into the shared source article on Shopify
  • Double titles in articles fixed: the leading <h1> matching the post title is stripped from the body so Shopify renders it once
  • Non-source translations no longer overwrite the source article's metafields

v1.15.0 (April 10, 2026)

Added:

  • Blog Mappings now have independent Category and Language selectors with their own dropdowns. Combined rules match both filters at once and take priority over single-axis rules
  • Language selector is populated automatically from the active translation plugin (WPML / Polylang / TranslatePress / Weglot) and hides itself when none is active

v1.14.0 (April 9, 2026)

Changed:

  • Meta Fields tab, per-field toggles: replaced the plugin-level "WP Core / Yoast / RankMath / ACF" cards with a flat list of every detected meta field, each with its own on/off toggle, source badge, and type
  • New Refresh Fields button rescans recent posts for new keys without leaving the settings page

v1.13.0 (April 8, 2026)

Fixed:

  • Metafields are now actually sent to Shopify after async syncs (the callback wasn't triggering the metafield job)
  • ACF fields sync even when the ACF plugin is deactivated. The plugin falls back to raw post meta with field_* references
  • Checkbox values save correctly in all settings tabs, including the unchecked state
  • Meta Fields toggles are always editable; un-installed plugins show a yellow "Not detected" hint instead of being disabled

v1.12.19 (April 2, 2026)

Added:

  • Bidirectional Settings Sync: settings saved in the Shopify App now push to WordPress automatically (the WordPress to Shopify direction was already in place). The unified Refresh buttons in both admins pull plan info, settings, and updates in one click
  • Smart Redirections toggle added to the Shopify App's Redirections page; it stays in sync with the matching WordPress setting

v1.12.18 (April 2, 2026)

Added:

  • Reset to Defaults button in Advanced: restores every sync, metafield, files, and Gutenberg setting to its documented default (with a confirmation popup). Shopify connection and synced content are untouched
  • Admin Access Control: restrict the WordPress plugin's UI to administrators (or a custom list of allowed usernames). Non-permitted users see a read-only "View Only Mode" notice and can't submit forms

v1.12.17 (April 2, 2026)

Added:

  • Bulk actions for Shopify sync (Publish, Re-publish, Unpublish) in WordPress posts list
  • make seed-wordpress-dev command for demo content seeding
  • Seed articles with Gutenberg blocks, inline CSS, and SEO metafields

Changed:

  • Moved "Include Block CSS" option below "Enable Custom Blocks" in settings
  • Added documentation link to Shopify theme CSS configuration guide

Fixed:

  • Authorization redirect in Shopify embedded app (reconnect functionality)
  • Missing "Enable Smart Redirections" checkbox in WordPress plugin Redirections tab

v1.12.16 (March 31, 2026)

Fixed:

  • Custom frontmatter fields now correctly accessible in SSG templates
  • Screencasts page video player and playlist rendering
  • Docs page lastUpdated display
  • Error page errorCode display
  • Post template language attribute

v1.12.15 (March 29, 2026)

Changed:

  • Simplified WordPress plugin connection flow
  • Removed API Secret field (only API Key needed)
  • Removed Manual Configuration section (OAuth only)

v1.12.14 (March 28, 2026)

Added:

  • Screencasts page with video tutorials
  • Getting Started guide video
  • Plugin Installation walkthrough
  • Content Sync Overview screencast

v1.12.13 (March 27, 2026)

Fixed:

  • Landing page SEO metadata rendering
  • Pricing card feature list alignment
  • Mobile navigation toggle animation

v1.12.12 (March 26, 2026)

Added:

  • Blog hub page with article listings
  • Category filtering for blog posts
  • Featured image support for articles

Changed:

  • Improved dark theme contrast ratios (WCAG 2.2 AA)
  • Updated pricing tier descriptions