The Brief
Our client operates a WooCommerce-based eCommerce store carrying products from multiple suppliers. Their fulfilment and catalogue management runs through a third-party supplier platform that holds the product data, stock levels, pricing, and order records. The gap between that platform and their WooCommerce store was being bridged manually – a process that was neither scalable nor reliable as the business grew.
RubyWeb was brought in to design, build, and deliver a custom WordPress integration plugin that would close that gap entirely. The objective was a fully automated, two-way sync between WooCommerce and the supplier platform – covering product imports, stock and pricing updates, image synchronisation, and order flow from checkout through to confirmed supplier order.
The Challenge
The core problem was a data pipeline that didn’t exist. Product records lived in the supplier platform. The WooCommerce store needed them – accurately, reliably, and without manual intervention every time a price changed or a product went out of stock.
The complexity compounded quickly. This wasn’t a simple product feed. The catalogue included variable products with size, colour, and weight variants. Images were mapped per colour variant, not just per product. Pricing needed to update on a schedule short enough to prevent customers purchasing at stale prices. And when a customer checked out, that order needed to flow back into the supplier platform as a confirmed purchase order – automatically, not via email.
A further operational risk existed around supplier filtering. The platform could surface products from multiple suppliers, and without proper controls, an unconfigured import could pull through the entire supplier catalogue indiscriminately – creating product management chaos on the live store.
- The product catalogue included variable products with multiple attribute dimensions - size, colour, and weight - requiring a structured variant mapping approach rather than a simple product import
- Product images were mapped at the colour-variant level, not the product level, requiring a separate image sync layer that could assign gallery images to the correct variation
- Stock and pricing updates needed to happen frequently enough to prevent overselling or customer purchases at outdated prices - a full catalogue re-import every time was not viable
- The order flow from WooCommerce checkout to confirmed supplier order had no automation - orders required manual processing after every purchase
- Token-based API authentication with an unspecified token lifespan created a risk of silent sync failures on long-running import operations
- Large catalogue imports risked PHP timeout failures without a batched processing approach
Our Approach
We scoped this as a plugin architecture project before writing a line of code. The integration touched five distinct operational areas – authentication, product import, image sync, stock and pricing updates, and order flow – each with its own data structure, schedule, and failure mode. Treating it as a single build without clear separation of concerns would have produced something fragile and difficult to maintain.
The plugin was architected as a set of independent, single-responsibility classes – one per operational area – so that a failure or change in one layer could not cascade into others. Each class was scoped with its own error handling, logging, and retry logic.
Phased delivery was agreed from the start. Phases covering product import, image sync, stock updates, and the admin interface could begin immediately. Phases requiring live API test credentials – authentication testing, checkout integration, and end-to-end QA – were sequenced to follow once access was confirmed from the supplier platform.
Architecture & UX Decisions
Two sync schedules were designed to serve different operational needs. A full product import runs daily at 2:00 AM – pulling complete product records, creating or updating WooCommerce products, re-attaching images, and refreshing categories and variants. A lightweight delta sync runs every 30 minutes, pulling only stock levels and pricing and matching updates back to existing WooCommerce products by SKU. This separation kept the frequent syncs fast and the overnight imports comprehensive without competing for server resources.
SKU was chosen as the primary matching key across all sync operations – ensuring that updates to existing products never created duplicates and that orphaned variations could be identified and handled cleanly.
The order flow was designed around WooCommerce’s native checkout hooks. On order placement, a quote is created in the supplier platform from the cart data. On payment confirmation, that quote is converted to a confirmed order. The supplier platform reference is stored in WooCommerce order meta, giving both systems a shared record of the transaction.
Supplier filtering was resolved at the platform level rather than in the plugin code – the supplier platform controls which suppliers are active, and the API only returns products from active suppliers. This kept the plugin clean and meant supplier management required no code changes.
The Build
The core deliverable was a standalone WordPress plugin – built on PHP 8.1 and above, requiring WordPress 6.0 or later and WooCommerce 8.0 or above – delivered across eight sequential phases with a total estimated scope of 57 hours. The full scope of delivery included:
- Token-based API authentication with automatic re-authentication on 401 responses, preventing silent sync failures on long-running operations
- Full product import engine pulling complete product records from the supplier API – creating and updating WooCommerce products, variable products, attributes, size and colour and weight variants, categories, and brand taxonomy
- Image sync layer pulling product images mapped to colour variants, sideloading to the WooCommerce media library, and assigning to the correct product gallery per variation
- Stock and pricing delta sync running every 30 minutes via WP-Cron, matching records by SKU and updating WooCommerce stock quantity and price without touching other product data
- Checkout integration mapping WooCommerce customers to supplier platform customer records, creating a supplier quote on order placement, converting to a confirmed order on payment, and storing supplier references in WooCommerce order meta
- Batch processing architecture with configurable batch size and progress storage in wp_options, allowing interrupted syncs to resume without restarting from scratch
- Admin settings page covering API credentials, sync frequency controls, manual sync triggers with AJAX progress feedback, and a sync log dashboard showing the last 50 events
- Structured logging to a dedicated log table with admin email notification on sync failure
- Custom product meta fields maintaining the link between WooCommerce and supplier platform records across all sync operations
- Full risk mitigation for large catalogue imports, token expiry, orphaned product variations, and customer mapping at checkout
The Outcome
The client’s WooCommerce store now operates with an automated data pipeline that handles what previously required manual effort across two systems. Product data stays current. Stock levels update every 30 minutes. Orders flow from checkout to confirmed supplier order without anyone in between.
Specific outcomes include:
- A fully automated product catalogue – new and updated products from active suppliers appear in WooCommerce on the next daily import without manual intervention
- Stock and pricing accuracy maintained on a 30-minute cycle, reducing the risk of overselling or customer purchases at outdated prices
- Order automation from WooCommerce checkout to confirmed supplier order, eliminating the manual processing step between a customer paying and a supplier receiving the order
- A clean, maintainable plugin architecture with separation of concerns across every operational layer – authentication, product import, image sync, stock updates, and order flow each managed independently
- An admin interface that gives the client full visibility of sync status, last run times, error logs, and the ability to trigger manual syncs when needed
- A batched import architecture that handles large catalogues without PHP timeout failures and can resume interrupted syncs from where they stopped
The business now has the infrastructure to scale its supplier relationships and catalogue size without the operational overhead growing in proportion.