WP Manifestindependent plugin directory
manifest / ecommerce / woocommerce-multi-currency-inventory

WooCommerce Multi-Currency & Inventory

Multi-currency pricing and multi-location inventory management for WooCommerce. Two independently toggleable modules that extend WooCommerce with enterprise-grade currency handling and warehouse-level stock tracking.

by Towfique Elahe · github.com/towfique-elahe/woocommerce-multi-currency-inventory · website

0stars
0forks

Install

No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:

wp plugin install https://github.com/towfique-elahe/woocommerce-multi-currency-inventory/archive/refs/heads/main.zip

Readme

WooCommerce Multi-Currency & Inventory

Multi-currency pricing and multi-location inventory management for WooCommerce. Two independently toggleable modules that extend WooCommerce with enterprise-grade currency handling and warehouse-level stock tracking.

Features

Multi-Currency Pricing

  • Automatic exchange rate syncing from ECB, Open Exchange Rates, Fixer.io, or manual entry
  • Per-product price overrides for any enabled currency
  • Markup & rounding per currency (percentage markup, round/floor/ceil, charm pricing like $X.99)
  • Geolocation-based currency detection (opt-in)
  • Currency switcher available as a shortcode ([wcmci_currency_switcher]), WordPress widget, or Gutenberg block
  • Cart, checkout & order conversion with full currency context stored on orders
  • Payment gateway filtering by currency
  • WooCommerce Blocks compatible (cart & checkout blocks)

Multi-Location Inventory

  • Unlimited warehouse/store locations with address, priority, and shipping zone assignments
  • Per-location stock tracking with bin/SKU, low-stock alerts, and reserved quantities
  • Intelligent allocation engine with three strategies: priority-based, nearest location, or highest stock
  • Stock reservations during checkout with configurable TTL and automatic expiry sweeper
  • Split shipment support for multi-source fulfillment
  • Full order lifecycle integration (allocate → reserve → commit → release/restock on refund)
  • Immutable audit ledger recording every stock change with user, type, and notes
  • Nightly reconciliation to detect drift between custom tables and WooCommerce core stock
  • Inter-location stock transfers

Admin & Compliance

  • Settings page under WooCommerce with 4 tabs (General, Currencies, Locations, Advanced)
  • Currencies management page with rate sync controls
  • Product-level metaboxes for per-currency prices and per-location inventory
  • GDPR exporter and eraser for user currency preferences
  • HPOS (High-Performance Order Storage) compatible
  • Cache plugin compatibility (Cloudflare, Redis, WP Object Cache)
  • Debug logging via WooCommerce logger
  • Multisite support

Requirements

Requirement Version
PHP >= 8.1
WordPress >= 6.4
WooCommerce >= 8.0 (tested up to 9.3)

Installation

  1. Download or clone this repository into your wp-content/plugins/ directory:

    cd wp-content/plugins/
    git clone https://github.com/towfique-elahe/woocommerce-multi-currency-inventory.git
  2. Install dependencies:

    cd woocommerce-multi-currency-inventory
    composer install
    npm install
    npm run build
  3. Activate the plugin through the WordPress admin or via WP-CLI:

    wp plugin activate woocommerce-multi-currency-inventory
  4. Go to WooCommerce > Settings > Multi-Currency & Inventory to configure the plugin.

Configuration

Currency Module

  1. Navigate to WooCommerce > Settings > Multi-Currency & Inventory > Currencies
  2. Select a rate provider (ECB is free and works out of the box)
  3. Set the sync interval (hourly, twice daily, daily, or manual)
  4. Go to WooCommerce > Currencies to add and configure currencies with exchange rates, markup, and formatting

Inventory Module

  1. Navigate to WooCommerce > Settings > Multi-Currency & Inventory > Locations
  2. Choose an allocation strategy (priority, nearest, or highest stock)
  3. Configure reservation TTL and split shipment preferences
  4. Go to WooCommerce > Locations to create warehouse/store locations

Currency Switcher

Add the switcher to your storefront using any of these methods:

[wcmci_currency_switcher style="dropdown"]
[wcmci_currency_switcher style="list"]

Or use the Currency Switcher widget or Gutenberg block.

Database Tables

The plugin creates the following custom tables on activation:

Table Purpose
wp_wcmci_currencies Currency configuration and rates
wp_wcmci_product_prices Per-product per-currency price overrides
wp_wcmci_rate_history Exchange rate change audit log
wp_wcmci_locations Warehouse/store location metadata
wp_wcmci_inventory Per-product per-location stock levels
wp_wcmci_ledger Immutable stock change audit trail
wp_wcmci_reservations Temporary stock holds during checkout
wp_wcmci_transfers Inter-location stock transfers
wp_wcmci_transfer_items Transfer line items
wp_wcmci_location_zones Location-to-shipping-zone mappings

All tables are removed on plugin uninstall.

Development

# Install dependencies
composer install
npm install

# Build assets
npm run build

# Watch mode
npm run start

# Linting
npm run lint:js
npm run lint:css
composer lint
composer lint:fix

# Tests
composer test

Project Structure

woocommerce-multi-currency-inventory/
├── woocommerce-multi-currency-inventory.php   # Main plugin file
├── uninstall.php                              # Cleanup on uninstall
├── migrations/                                # Database schema migrations
├── src/
│   ├── Core/          # Plugin bootstrap, activator, logger, migrations
│   ├── Currency/      # Currency resolution, conversion, rate providers, switcher
│   ├── Inventory/     # Stock manager, allocation engine, reservations, ledger
│   ├── Admin/         # Settings pages, product metaboxes, analytics
│   ├── Blocks/        # WooCommerce Blocks integration
│   ├── Compat/        # HPOS and cache plugin compatibility
│   └── Privacy/       # GDPR data exporter and eraser
├── assets/
│   ├── src/           # Source JS and CSS
│   └── build/         # Compiled assets (generated)
├── templates/         # Template overrides (reserved)
├── languages/         # Translation files
└── tests/             # PHPUnit tests

Hooks & Extensibility

Filters

Filter Description
wcmci_rate_providers Register custom exchange rate providers
wcmci_country_currency_map Customize geolocation-to-currency mappings
woocommerce_get_sections_wcmci Add custom settings tabs
woocommerce_get_settings_wcmci Add custom settings fields

Actions

Action Description
wcmci_sync_exchange_rates Triggered on scheduled rate sync
wcmci_project_stock Sync aggregate stock to WooCommerce core
wcmci_sweep_expired_reservations Hourly cleanup of expired reservations
wcmci_reconcile_stock Nightly stock drift detection

Uninstall

On uninstall, the plugin removes all custom database tables, plugin options, user meta, transients, and order meta. Multisite installations are cleaned up on a per-site basis.

License

This project is licensed under the MIT License.

Author

Towfique Elahe

Read the full README on GitHub →