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.

Blog Routing Rules in WordPress

Adding a rule

Add Mapping Rule dialog

  1. Click Add Mapping Rule
  2. 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)
  3. 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
  4. 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:

  1. Higher rules win
  2. On equal priority, the more specific rule wins: language + category, then language, then category, then the default
  3. 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:

FieldShopify key
Titletitle
Contentbody_html
Excerptsummary_html
Handlehandle
SEO title and descriptionmeta_title, meta_description
Custom fields synced as metafieldsmetafields.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.

AspectMarkets and translationsSeparate blogs
Articles in ShopifyOne, with translationsOne per language
URL/de/blogs/news/article/blogs/news-de/artikel
Language switchingShopify MarketsHreflang 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