Why buyers land on an empty cart from Facebook Shop
Meta removed native checkout from Facebook and Instagram Shops. When a buyer taps Buy now, Meta redirects them to your website with the entire cart encoded in a checkout URL:
https://store.com/checkout/?products=wc_post_id_123%3A2%2CSKU-RED%3A1&coupon=SALE20
WooCommerce core only understands plain numeric product IDs in that parameter. Real Meta catalogs never send those. They send wc_post_id_123 retailer IDs from the Meta for WooCommerce extension, bare SKUs from data feeds, or SKU_123 composites.
The result: your buyer lands on an empty cart, and the sale is lost — silently. No error, no log entry, no notice. WordPress.org support threads are full of merchants stuck exactly here, watching Facebook and Instagram Shop traffic arrive and convert at zero.
What the plugin does
Install, activate, done. There is no settings screen because there is nothing to configure. When a buyer arrives from a Facebook or Instagram Shop, the plugin:
- Detects the Meta checkout URL on any front-end page — by the
productsparameter, so no path configuration is needed. - Resolves every ID format Meta can send: WooCommerce product IDs, variation IDs,
wc_post_id_123retailer IDs, SKUs, variation SKUs, andSKU_123composites. - Rebuilds the cart exactly as the buyer picked it on Meta — old cart contents cleared, quantities respected, stock validated, variations added with their attributes.
- Applies the coupon from the URL and shows the discount.
- Tells the buyer if anything could not be added — out of stock, product removed, invalid coupon — with clear store notices. Never a silent empty cart. That visibility is also what Meta’s periodic checkout-URL validation checks for.
- Preserves attribution —
utm_source,utm_medium,utm_campaign,utm_content,utm_term,fbclidandcart_originare forwarded to the checkout URL for your analytics. Everything else is stripped. - Redirects to checkout — the buyer is two clicks from paying.
Setup guide
Step 1 — Install
Plugins → Add New → search “WPRobo Meta Checkout URL” → Install → Activate. WooCommerce must be active.
Step 2 — Copy your checkout URL
After activation a one-time notice shows it, and it is always available via the “Your Meta checkout URL” link on the Plugins page row. It is simply your store’s checkout page, e.g. https://yourstore.com/checkout/.
Step 3 — Register it with Meta
In Meta Commerce Manager open your shop’s Settings → Checkout method → “Checkout on another website” and paste the URL. Meta appends the product parameters automatically at purchase time — you never construct product URLs yourself.
Step 4 — Validate
Use Commerce Manager’s checkout URL validation tool. Add a product to a test order from your shop; you should land on your WooCommerce checkout with the right items, quantities and any promo applied.
Caching note — the most common gotcha: exclude your checkout page, and any URL carrying a products query parameter, from page caching (LiteSpeed Cache, WP Rocket, SG Optimizer, host-level caches). Most caching plugins exclude /checkout/ by default — verify it.
For developers
The resolver is filterable — add custom ID mappings without forking:
add_filter( 'wprobo_mcu_resolved_product_id', function ( $product_id, $ref ) {
if ( 0 === $product_id && 'LEGACY-123' === $ref ) {
return 456; // your WooCommerce product ID
}
return $product_id;
}, 10, 2 );
Coming in Pro
A retailer-ID mapping table for feed catalogs with custom IDs, a variation attribute mapping UI, a request logging dashboard, and a checkout-URL validation simulator that mirrors Meta’s Commerce Manager test. The free version stays fully functional — Pro adds tooling, not gates.
