A multi-store shop (5 stores, 3 currencies) started showing wrong prices – the euro price appeared on the PLN store and vice versa. The problem appeared after adding a new store and only affected products with price rules. Fix time: 6 hours.
Symptoms
- Prices in wrong currency on selected stores
- Problem only for products with catalog price rules
- Reindex does not help
- Duplicate entries in
catalogrule_product_pricefor different store_id with the same prices
Diagnosis
SELECT crpp.product_id, crpp.website_id, crpp.rule_price, w.name as website_name FROM catalogrule_product_price crpp JOIN store_website w ON w.website_id = crpp.website_id WHERE crpp.product_id = 123 ORDER BY crpp.website_id; SELECT scope_id, value FROM core_config_data WHERE path = 'currency/options/base' ORDER BY scope_id;
Cause
The new store was added by copying an existing store’s configuration. The currency/options/base value remained from the original store (EUR instead of PLN). Price rules were converting at the wrong base rate.
Solution
bin/magento config:set --scope=websites --scope-code=pl_store currency/options/base PLN bin/magento config:set --scope=websites --scope-code=eu_store currency/options/base EUR bin/magento catalogrule:apply bin/magento indexer:reindex catalogrule_rule catalogrule_product bin/magento cache:flush
Takeaways
Creating new stores by copying configuration is risky – always check base currency, timezone and locale after adding a store. In multi-store setups every price operation requires explicitly setting the store context, otherwise the default store is used.
