by Kavio Labs · for WooCommerce 10.1+ on WordPress 6.7+
Enter WooCommerce product prices in EUR, GBP or any currency and let the store prices follow the exchange rate: free daily European Central Bank rates or your own, an adjustment per currency, a change threshold, background recalculation, rounding to steps and endings like .99, cost + markup, sale prices and variations, bulk assignment that keeps today's prices, a price change log with CSV, a products list column, CSV import/export columns and a REST API field. HPOS and blocks compatible.
Tested on WooCommerce 11.2.1 & WordPress 7.1.3Updated Nov 2, 2026Version 1.0.0Compatible with WooCommerce 10.1 – 11.2, WordPress 6.7+ No core file edits
Built forWooCommerce
Buy in one currency, sell in another1 of 7
What it does
Enter WooCommerce product prices in EUR, GBP or any currency and let the store prices follow the exchange rate: free daily European Central Bank rates or your own, an adjustment per currency, a change threshold, background recalculation, rounding to steps and endings like .99, cost + markup, sale prices and variations, bulk assignment that keeps today's prices, a price change log with CSV, a products list column, CSV import/export columns and a REST API field. HPOS and blocks compatible.
Buy in one currency, sell in another. If your supplier invoices in euros and you sell in dollars, every rate move eats your margin or makes you edit prices by hand. Product Price Currency keeps the supplier price on the product and turns it into your store price with the rate, by itself.
Features
Price currency per product and variation, regular and sale price, or cost + markup
Free daily European Central Bank rates or your own, plus an adjustment for bank fees
Prices follow when the rate moves more than your threshold, in the background
Rounding to steps and endings like .99
Bulk assign by category without changing today's prices
A log of every price change with CSV export
Products list column and filter, CSV import/export columns, REST API field
Optional: fill the WooCommerce cost of goods
What you get
Download & installThe plugin .zip, installed in Plugins > Add New Plugin > Upload Plugin. Download it from My licenses right after payment.
12 months of updates & supportNew versions and help for 12 months (24 or 36 months at checkout). After that the plugin keeps working; renew anytime at 50%.
License for your storeOne production domain with all its subdomains; staging and local development hosts are free. How licensing works
30-day refundFull refund within 30 days of your first purchase, no reason needed. Refund policy
Tested buildsWooCommerce 10.1 – 11.2, WordPress 6.7+. Tested on WooCommerce 11.2.1 and WordPress 7.1.3.
Documentation & supportFull guide (Installation, Configuration, Usage, FAQ) on this page. Tickets from your account, first reply within 1 business day.
Compatibility
Product Price Currency works with WooCommerce 10.1 – 11.2, WordPress 6.7+.
We list the builds we install and test on. “Tested” means the test plan ran on that build; “Supported” means the build is inside the supported range.
Compatibility
Version
Range
Runs on
Status
WooCommerce 11
11.0 – 11.2
WordPress 6.7 – 7.1
Tested on 11.2.1
WooCommerce 10
10.1 – 10.x
WordPress 6.7+
Supported
WordPress
6.7 – 7.1
PHP 7.4 – 8.3
Tested on 7.1.3
1.0.0
Nov 2, 2026
Latest
First release for WordPress 6.7+ and WooCommerce 10.1+ (tested with WordPress 7.1.3 and WooCommerce 11.2.1); HPOS and Cart/Checkout blocks compatible (prices are plain WooCommerce prices).
Price currency per product and per variation: regular and sale price in that currency, or cost + markup; WooCommerce regular / sale price calculated on save (CRUD only); optional WooCommerce cost of goods.
Exchange rates (WooCommerce > Price currencies): free daily ECB reference rates (cross rates to the store currency) or manual rates, adjustment % per currency, change threshold, recalculation in Action Scheduler batches of 50, "Recalculate now".
Rounding: nearest / up / down to steps 0.01-10 with endings .99, .95, .90, .49, .00; a sale price at or above the regular price is dropped.
Bulk assign by category: set a currency keeping today's prices, skip products that already have one, or remove it.
Recalculation log (own table) with filter, CSV export and retention; products list column and filter.
Product CSV importer / exporter columns; REST API field kv_price_currency on wc/v3 products and variations.
English texts.
How do I install the plugin?
Upload the plugin. Plugins > Add New Plugin > Upload Plugin: choose the .zip from My licenses and click Install Now.
Activate. Activate it on the Plugins screen. WooCommerce must be active; the plugin tells you if it is not.
Enter the license key. WooCommerce > Settings, the plugin's own tab: paste the key from My licenses. You have 14 days to do it; staging and local sites are included.
WooCommerce 10.1 – 11.2, WordPress 6.7+. Tested on WooCommerce 11.2.1 and WordPress 7.1.3. The Compatibility tab lists every version range.
Do the plugins work with HPOS and the block checkout?
Yes. Every plugin declares compatibility with High-Performance Order Storage and the Cart and Checkout blocks, and is tested in both the block and the classic cart and checkout.
Will they work with my theme?
They use WooCommerce hooks, blocks and the Store API instead of template overrides, so block themes and classic themes both work. We test on Twenty Twenty-Five.
What does the license cover?
One production store domain with every subdomain (www, shop., staging.), plus local development hosts such as localhost, *.local and *.test. A store on another domain needs its own license; a second-store license is 40% off. You have 14 days after installing to enter the key. 12 months of updates and support are included; after that the plugin keeps working and renewals are 50% off. How licensing works
Can I get a refund?
Yes. Ask for a full refund within 30 days of your first purchase, no reason needed: open a ticket or write to [email protected] with your order number. The money goes back to the card or bank account you paid with within 5 business days of approval. Refund policy
How do I get help?
Open a ticket from your account, so your license details are attached. We answer Monday to Friday: bug reports within 1 business day, how-to questions within 2. Support policy. Not a customer yet? Ask a pre-sales question.
Many shops buy in one currency and sell in another: the supplier invoices in EUR, GBP or CHF, the store sells in USD. Product Price Currency lets you enter the price of a product in the currency you buy in. The WooCommerce price is calculated from it with the exchange rate, rounded the way you like, and recalculated by itself when the rate moves.
Your store keeps one currency. Shoppers see normal WooCommerce prices, so the cart, the checkout (block and classic), coupons, taxes, feeds, caches and reports work as before.
Exchange rates
Key features
Price currency per product and per variation: regular and sale price in that currency, for simple, external and variable products.
Cost + markup: enter the cost in the supplier currency and a markup %; the price follows the cost and the rate. The cost can also fill the WooCommerce cost of goods field.
Free exchange rates: the daily reference rates of the European Central Bank (no account, no key), or a manual rate per currency. An adjustment % per currency covers bank fees.
Threshold: prices are recalculated only when a rate moves more than a set percentage (0.5 % by default), so small daily moves do not change your prices.
Background recalculation: large catalogs are updated in batches through WooCommerce's Action Scheduler.
Rounding: to the nearest step, up or down (0.01 to 10), with price endings such as .99, .95 or .00.
Bulk assign: give a whole category a price currency and keep today's prices, or remove it.
Log: every price change with old and new price, rate and reason; CSV export.
Products list: a "Price currency" column and a filter.
Import and export: columns in the WooCommerce product CSV importer and exporter; a kv_price_currency field in the WooCommerce REST API.
Compatibility
WordPress 6.7+, WooCommerce 10.1+ (tested with WordPress 7.1.3 and WooCommerce 11.2.1), PHP 7.4 - 8.3.
HPOS and the legacy order storage; Cart and Checkout blocks and the classic checkout (prices are plain WooCommerce prices).
Works with the WooCommerce cost of goods feature when it is switched on.
What it does not do
It does not change the currency your shoppers pay in. For shopper currency switching use a currency switcher plugin; switchers convert normal store prices, which is what this plugin sets.
The European Central Bank publishes about 30 currencies. For others use a manual rate. If your store currency is not published by the ECB, all rates must be manual.
Installation
Requirements
WordPress 6.7 or later, WooCommerce 10.1 or later (tested with 11.2.1), PHP 7.4 - 8.3
Outbound HTTPS from the server to www.ecb.europa.eu for the free rates (WordPress HTTP API), or manual rates only
WP-Cron or a real cron job for the daily rate update (WooCommerce's Action Scheduler runs it)
Install
Download kv-product-price-currency-kv.zip from My licences > Downloads on woocommerce.kaviolabs.com.
In WordPress: Plugins > Add New > Upload Plugin, choose the zip, Install Now, Activate.
Enter your licence key under WooCommerce > Settings > Price currencies. The plugin works for 14 days without a key.
First steps
Open WooCommerce > Price currencies and add the currencies you buy in. "European Central Bank" fetches the rate at once; "Manual" takes your rate.
Choose the rounding under WooCommerce > Settings > Price currencies (for example nearest, step 1, ending .99).
Open a product, choose its Price currency under the price and enter the price in that currency, or switch a whole category on the Bulk assign tab.
Update
Upload the new zip and choose Replace current with uploaded. Settings, rates, products and the log are kept.
Uninstall
Deactivating stops the scheduled jobs. Deleting the plugin removes the settings, rates, the log table and the price currency data of the products only when Remove data on uninstall is ticked. The store prices always stay as they are.
Configuration
Exchange rates (WooCommerce > Price currencies)
One row per currency:
Column
Meaning
Rate source
European Central Bank (daily reference rate, fetched around 17:00 site time) or Manual
Rate
Value of 1 unit of the currency in your store currency. Editable for manual rates
Adjustment %
Added on top of the rate, for example 2 for bank fees. Negative values are allowed
Price rate
Rate + adjustment: the rate prices are calculated with. "prices at ..." shows the rate the products still use while a recalculation is pending or below the threshold
Products
Products and variations in this currency (opens the filtered product list)
Save stores the row. When the price rate moved more than the threshold, the products are recalculated in the background. Recalculate does it now (up to 300 products at once, more in the background). Remove works only when no product uses the currency.
Fetch rates and recalculate prices automatically. Saving a product always calculates its price
Recalculate when a rate moves more than (%)
0.5
0 = every change
Cost of goods
on
Also fill the WooCommerce cost of goods from the cost in the price currency (only when that WooCommerce feature is on)
Round
To the nearest step
Nearest, up, down, or only to the price decimals
Step
0.01
0.01, 0.05, 0.10, 0.50, 1, 5, 10
Price ending
None
.99, .95, .90, .49, .00
Keep the log for (days)
180
Older log rows are deleted by the daily job
Remove data on uninstall
off
See Installation
Rounding examples (nearest, ending .99): step 1: 128.40 becomes 127.99, 128.60 becomes 128.99. Step 5: 128.40 becomes 129.99, 126.00 becomes 124.99. A sale price that would end at or above the regular price is dropped.
Settings
Licence
Own-site edition: enter the licence key at the bottom of the settings. Without an active licence, rates are not fetched and prices are not recalculated automatically; prices you save on a product are still calculated and nothing else changes.
Usage
On a product
Under the price (General tab of simple and external products):
Price currency: the store currency (= off) or one of your currencies.
Price from: "A price in this currency" or "Cost + markup".
Regular price / Sale price in that currency, or Cost and Markup %.
While a price currency is chosen, the WooCommerce regular and sale price fields are marked "Calculated from EUR" and filled when you save. The note under the fields shows the rate and the resulting store prices.
Price currency on a product
Variations
Every variation has the same fields in its pricing area. Variations can use different currencies; the price range of the variable product follows.
Price currency on a variation
When rates change
The daily job fetches the ECB rates. A currency whose price rate moved more than the threshold is recalculated in the background (WooCommerce > Status > Scheduled Actions, group "kv-product-price-currency"). Every change is written to the log.
Bulk assign
WooCommerce > Price currencies > Bulk assign:
Choose a category (with its sub categories) or all products, and a currency.
Choose the action:
Set this currency and keep today's prices: the price in the currency is worked out from today's store price and rate, so nothing changes today.
Same, but skip products that already have a price currency.
Remove the price currency (the store prices stay as they are).
Up to 300 products are done at once, more in the background.
Bulk assign
Products list
The Price currency column shows the currency and the price (or cost + markup) of each product; variable products list their variations' currencies. The filter above the list shows the products of one currency or those in the store currency only.
Products list
Log
WooCommerce > Price currencies > Log: date, product, currency, rate, old and new regular and sale price, and the reason (product saved, rate change, bulk assign, CSV import, REST API, recalculated by hand). Filter by currency, export CSV.
Log
CSV import and export
The WooCommerce product exporter adds the columns Price currency, Price in currency, Sale price in currency, Cost in currency and Markup %. The importer maps columns with these names automatically and calculates the store price of each imported row.
REST API
Products and variations in wc/v3 have a kv_price_currency object: currency, mode (price or markup), regular_price, sale_price, cost, markup and the current rate. Sending it on create or update stores the source data and calculates the store price; null removes it.
FAQ
Do my customers see EUR prices?
No. Customers see your store currency. The currency is only the source of the price.
Where do the rates come from? Does it cost anything?
From the daily euro reference rates of the European Central Bank (www.ecb.europa.eu). No account, no key, no fee. You can use a manual rate for any currency instead.
My store currency is not published by the ECB. Then use manual rates for every currency. The rates page tells you when this is the case.
Why did my prices not change after a small rate move?
Prices change only when the rate moves more than the threshold (0.5 % by default). Set it to 0 to follow every change.
Does it work with variable products?
Yes. Each variation has its own price currency and prices; the price range of the product follows.
Does it work with sale schedules?
Yes. The plugin sets the sale price value; WooCommerce keeps handling the sale dates.
What happens to orders when prices change?
Nothing. Orders keep the prices they were placed with.
Can I use it with a currency switcher?
This plugin only sets normal store prices, which switchers then convert for shoppers. We have not tested every switcher; tell us if one does not work.
What does "keep today's prices" do in Bulk assign?
It works out the price in the chosen currency from the current store price and today's rate, so the store price stays the same today. From the next rate change on, the price follows the rate (with your rounding).
What happens without an active licence?
Rates are not fetched and prices are not recalculated automatically. Saving a product still calculates its price with the stored rate.
What is removed when I delete the plugin?
The licence state and the scheduled jobs always; settings, rates, the log and the price currency data of the products only with "Remove data on uninstall". The store prices stay as they are.
The department store block theme for WooCommerce: colour-coded departments, a department list beside the hero slider with two side promos, a big search with a department picker, tabbed product grids, a 2 + 1 + 2 offer grid, deals of the day with real countdowns, a department showcase, a promotions band and a three-column product page with a sticky buy box. Four styles (Meridian, Harbor, Citrus, Night) as Site Editor style variations, every colour editable. Cart and Checkout blocks styled, HPOS neutral.
Stop AI crawlers, scrapers, card testers, vulnerability scanners and unwanted countries before WordPress builds a page. Googlebot and Bingbot are verified by DNS and always allowed; 50+ bots get one switch each; country rules use free GeoIP databases and can close only the checkout (block and classic checkout, wc-ajax and Store API); card testing protection on order submissions; the add to cart flood fix for requests without a WooCommerce session; IP and network lists, rate limits for search, filters, forms and login, honeypots; a one-second challenge instead of a captcha; learning mode, dashboard, log, IP tester and Cloudflare export. HPOS and blocks compatible.
The campaign block theme for WooCommerce that makes a store feel like a sale is always on: a flash bar with the sale that ends first, a bento hero with a live deal tile, a dark flash deals zone with flip-tile countdowns on real sale end dates, round discount stickers, a category pill bar, stories with a player, a Discover feed with promo cells inside the grid, a product page campaign strip and a sticky phone buy bar. Sixteen colour styles as Site Editor style variations, two of them dark. Cart and Checkout blocks styled, HPOS neutral.