Blog Mappings
Blog mappings decide where each WordPress post lands in Shopify. You define them as routing rules: a rule matches posts by category, language or both, and sends them to a Shopify blog or to Shopify Pages.
WordPress Shopify
─────────────────────────────────────────────
Category "news" → Blog "News"
Language "de" → Blog "News", market Germany
Language "de" + "recipes" → Blog "Rezepte"
Anything else (default) → Blog "Journal"
Blog mappings are part of the Pro plan and above. On the Free plan, posts go to the first blog in your Shopify store.
Where to find them
In WordPress, go to Settings > Wash Connector and open the Blogs tab. The page is called Blog Routing Rules.

Adding a rule

- Click Add Mapping Rule
- Under WordPress Source, choose which posts the rule matches:
- WP Post Types: the post types the rule applies to
- Category: one category, or All categories (catch-all)
- Language: one language, or All languages (needs WPML or Polylang)
- Under Shopify Destination, choose where they go:
- Type: Blog Article (
/blogs/...) or Page (/pages/...) - Target Blog: an existing blog, or Create new blog
- Destination Domain: the domain used for preview and storefront links. Leave it on the primary domain unless you preview on another one
- Market & Locale: the Shopify market and language for this rule, or the primary market
- Type: Blog Article (
- Click Save Mapping
Rules can be exported to JSON and imported again with the Export and Import buttons, which is handy for copying rules between sites. Importing replaces all existing rules.
How a post is matched
Rules sit in a list, and you drag them to change the order. For each post, Wash takes the first rule that matches:
- Higher rules win
- On equal priority, the more specific rule wins: language + category, then language, then category, then the default
- If that still ties, the older rule wins
A rule with All categories and All languages is the default rule. It catches every post no other rule matched.
Posts that match no rule
Once a store has any rules, a post only syncs if a rule matches it. A post with no match is not guessed onto a blog: it shows No mapping in WordPress and stays unsynced. Add a default rule if you want everything to sync somewhere.
With no rules at all and a single store, Wash keeps the simple behaviour and sends posts to the first Shopify blog. If the site publishes to more than one store, every post needs a matching rule on each store, so a post mapped for the US store never lands in the UK one.
Posts that are already in Shopify, synced earlier or imported from Shopify, keep their destination. Editing and saving them updates the same article even if no rule matches.
Mapping strategies
One category, one blog
news → News
tips → Tips
reviews → Reviews
Good for simple blogs with a clear split.
Many categories, one blog
company-news → Blog
press-releases → Blog
events → Blog
Shopify has no categories, so this folds them into one blog. The categories still travel as article tags.
One rule per language
Language en → Blog "News", market United States
Language de → Blog "News", market Germany
Language fr → Blog "News", market France
For multilingual sites using WPML or Polylang. See the next section.
Languages and Shopify Markets
When a rule has a Market & Locale, Wash publishes translations into Shopify's own translation layer instead of making a separate article per language. The primary-language post becomes the article, and each WPML or Polylang translation of it is registered as that article's translation for the rule's locale. Shopify Markets then shows the right language on each market's URL, for example /de/blogs/news/article.
flowchart TD
A["Publish the post in the primary language"] --> B["Wash creates the Shopify article"]
B --> C["Add the translation in WPML or Polylang"]
C --> D["A rule matches the translation's language"]
D --> E["Wash registers it as a translation of the same article"]
E --> F["Shopify Markets shows it on that market's URL"]
These fields are translated:
| Field | Shopify key |
|---|---|
| Title | title |
| Content | body_html |
| Excerpt | summary_html |
| Handle | handle |
| SEO title and description | meta_title, meta_description |
| Custom fields synced as metafields | metafields.wash_custom.* |
You need:
- Shopify Markets with the languages published
- WPML or Polylang in WordPress
- The primary-language post synced before its translations
If you'd rather keep one article per language in separate blogs (for example /blogs/news-de/), point each language rule at its own blog and leave Market & Locale on the primary market. Then hreflang tags link the versions together.
| Aspect | Markets and translations | Separate blogs |
|---|---|---|
| Articles in Shopify | One, with translations | One per language |
| URL | /de/blogs/news/article | /blogs/news-de/artikel |
| Language switching | Shopify Markets | Hreflang tags from Wash |
Troubleshooting
Post shows "No mapping"
- No rule matches the post's category and language. Add a rule for it, or a default rule
- Check the rule is for the right post type
- On a multi-store site, check each store has a matching rule
Category or language missing from the dropdowns
- Categories come from the standard WordPress Category taxonomy
- Languages appear only when WPML or Polylang is active
Translations not appearing
- Check the primary-language post is synced
- Check the rule for the translation's language has a Market & Locale
- Check the language is published in Shopify Markets
- Check the WPML or Polylang translation is linked to the primary post
- Look for errors under Apps > Wash > Logs in Shopify
Post went to the wrong blog
- A higher rule matched first. Drag the more specific rule above it
- A post in two categories matches the first rule for either one