WooCommerce Setup Guide
Add a chat assistant to your WooCommerce store with automatic product sync.
You're in the developer setup guide. Looking for an overview of what Emporiqa does for your WooCommerce store? See the integration page.
Quick Start
For store owners. Install, configure, sync — with step-by-step screenshots.
StartDeveloper Docs
For developers. Architecture, webhook payload, WP-CLI commands, and customization filters.
ReadFast Start
Install the plugin, paste two credentials, run one sync. Your chat widget goes live on your store.
What you'll need
- Admin access to your WordPress site (WordPress 6.0+, WooCommerce 8.0+)
- An Emporiqa account — create a free Emporiqa account if you don't have one yet
- A few minutes of hands-on time (sync runs in the background)
First, install and activate the plugin. In WordPress admin go to Plugins → Add New, search for Emporiqa, click Install Now, then Activate. Or upload the zip from wordpress.org/plugins/emporiqa via Plugins → Add New → Upload Plugin.
Enter your credentials
Go to Settings → Emporiqa. Paste your Store ID and Connection Secret — both come from your Emporiqa dashboard under Store Settings → Integration.
Run the initial sync
Open the Sync tab. In the Bulk Sync panel, click Sync All to send all products and pages. Larger catalogs take a few minutes. If you want to validate the setup first without storing anything, use Test Connection (Dry Run) below.
Verify the chat widget
Open your storefront. The chat bubble appears in the bottom-right corner. Click it, ask a product question, and watch the salesperson answer from your catalog.
You're live
- New products and pages sync automatically when you save them
- Customers can ask about products, policies, and their orders
- Add-to-cart in chat; customers proceed to your store checkout
Need to customize sync behavior, add custom fields, or integrate with a third-party plugin?
See Developer DocsDeveloper Documentation
Architecture, configuration reference, webhook payload schema, WP-CLI commands, and customization filters.
Architecture
The plugin listens to WooCommerce and WordPress hooks (woocommerce_update_product, save_post, woocommerce_order_status_completed, etc.) and sends webhook events to Emporiqa using deferred delivery: product and page events are queued during the request and flushed on shutdown, while order conversion events are scheduled via Action Scheduler. Saving a product completes locally; the webhook delivery runs asynchronously after the response.
All translations and channels for a single product or page consolidate into one webhook event. Variable products sync the parent plus each variation, and changes cascade: saving a variation triggers a parent re-sync so search always sees the full catalog state. The plugin declares WooCommerce High-Performance Order Storage (HPOS) compatibility.
Requirements
| WordPress | 6.0 or higher |
| WooCommerce | 8.0 or higher |
| PHP | 7.4 or higher |
| Emporiqa account | Free Emporiqa account ($25 credit on signup) |
Configuration Reference
All settings live at Settings → Emporiqa. Connection Settings is the main section and is expanded by default. Sync toggles and advanced settings (languages, page post types, webhook URL, batch size) are collapsed under Advanced.
Connection Settings
| Setting | Description |
|---|---|
| Store ID | Your unique store identifier from the Emporiqa dashboard. |
| Connection Secret | Shared secret used for HMAC-SHA256 signing of webhook and order tracking requests. |
| Order Tracking API URL | Read-only field. Copy this URL into your Emporiqa dashboard (Settings → Store Integration → Order Tracking) to enable order lookup from the chat. |
Advanced Settings
Most stores don't need to change these.
| Setting | Description |
|---|---|
| Sync Products | Enable/disable product synchronization. |
| Sync Pages | Enable/disable page synchronization. |
| Enabled Languages | Which languages to sync. The plugin auto-detects WPML, Polylang, and TranslatePress, consolidates translations into one payload per product, and falls back to determine_locale() when no multilingual plugin is active. |
| Page Post Types | Which post types to sync as pages (pages, posts, or custom post types). |
| Webhook URL | Emporiqa webhook endpoint. Default works for most stores. |
| Batch Size | Items per webhook request during full sync (default: 25). |
Always-on capabilities
- Cart operations — add, update, remove from inside the chat via AJAX endpoints that talk directly to WooCommerce's cart.
- Conversion tracking — chat sessions linked to completed orders for revenue attribution.
- Multi-currency — detects the active currency from WOOCS, WPML Multi-Currency, WooCommerce Payments, and Aelia Currency Switcher; override with the
emporiqa_active_currencyfilter.
Features
Real-time Webhooks
Products and pages sync via webhooks on create, update, and delete using WooCommerce hooks (woocommerce_update_product, save_post, etc.) with dedup to prevent duplicate events.
Chat Widget
Embedded automatically via wp_footer. Language and currency are detected from the active WordPress locale and WooCommerce currency.
Multilingual
Auto-detects WPML, Polylang, and TranslatePress. Products sync with translated names, descriptions, categories, and attributes from all enabled languages, consolidated into one payload per product.
Variable Products
Full parent/variation sync. Saving a variation triggers a parent re-sync. Deleting a variation sends a variation delete event and re-syncs the parent.
Cart Operations
Customers can add, update quantities, and checkout from the chat. The plugin exposes dedicated AJAX endpoints that use WC()->cart directly.
Admin Sync UI
Trigger full sync from the settings page Sync tab with an AJAX progress bar and live log panel. Three buttons: Sync Products, Sync Pages, Sync All.
Conversion Tracking
Sends an order.completed webhook via woocommerce_order_status_completed, linking chat sessions to revenue on your dashboard.
Deferred Sending
Product and page events are queued and flushed on shutdown. Order conversion events run through Action Scheduler so bulk order updates don't block the request.
Webhook Payload
Each product or page is sent as a single webhook event containing all languages and channels. Translatable fields are nested by channel and language code.
Product Event
{
"type": "product.updated",
"data": {
"identification_number": "product-42",
"sku": "SKU-001",
"channels": ["default"],
"names": {"default": {"en": "Hiking Boots", "de": "Wanderschuhe"}},
"descriptions": {"default": {"en": "Waterproof leather boots...", "de": "Wasserdichte Lederstiefel..."}},
"links": {"default": {"en": "https://store.com/hiking-boots", "de": "https://store.com/de/wanderschuhe"}},
"categories": {"default": {"en": ["Footwear > Hiking"], "de": ["Schuhe > Wandern"]}},
"attributes": {"default": {"en": {"Material": "Leather"}, "de": {"Material": "Leder"}}},
"brands": {"default": "TrailPeak"},
"prices": {"default": [{"currency": "EUR", "current_price": 129.99, "regular_price": 149.99}]},
"images": {"default": ["https://store.com/wp-content/uploads/boots-front.jpg"]},
"availability_statuses": {"default": "available"},
"stock_quantities": {"default": 42},
"is_parent": false,
"parent_sku": null,
"variation_attributes": {}
}
}
Field Structure
| Type | Pattern | Fields |
|---|---|---|
| Translatable | {channel: {lang: value}} |
names, descriptions, links, categories, attributes, variation_attributes |
| Shared | {channel: value} |
brands, prices, images, availability_statuses, stock_quantities |
| Flat | Direct value | identification_number, sku, channels, is_parent, parent_sku |
Customization Filters
The plugin exposes WordPress filters you can hook from a custom plugin or your theme's functions.php to control sync behavior and modify data before it's sent.
| Filter | Description |
|---|---|
emporiqa_should_sync_product |
Return false to skip a specific product. |
emporiqa_should_sync_page |
Return false to skip a specific page. |
emporiqa_product_data |
Modify the consolidated product payload before send. |
emporiqa_variation_data |
Modify the variation payload before send. |
emporiqa_page_data |
Modify the page payload before send. |
emporiqa_product_channels |
Assign sales channels to a product (default: ['default']). |
emporiqa_page_channels |
Assign sales channels to a page. |
emporiqa_product_images |
Customize product image URLs. |
emporiqa_product_attributes |
Customize product attributes per language. |
emporiqa_brand_taxonomy |
Override brand taxonomy (default: product_brand). |
emporiqa_product_brand |
Fallback brand name when no taxonomy term is set. |
emporiqa_product_types |
Product types to sync (default: simple, variable, grouped, external). |
emporiqa_widget_enabled |
Show or hide the widget per page. |
emporiqa_widget_params |
Add or override widget embed parameters. |
emporiqa_widget_channel |
Set the widget sales channel (default: default). |
emporiqa_active_currency |
Override the detected active currency code. |
emporiqa_checkout_url / emporiqa_cart_url |
Override URLs passed to the chat cart handler. |
emporiqa_order_tracking_data |
Add fields to order tracking responses. |
emporiqa_tracked_order_statuses |
Order statuses that trigger conversion events (default: wc-completed). |
Example: skip draft products
add_filter('emporiqa_should_sync_product', function ($should_sync, $product) {
if (str_contains($product->get_name(), '[DRAFT]')) {
return false;
}
return $should_sync;
}, 10, 2);
Example: add a custom attribute to the product payload
// Attributes are nested: {channel: {lang: {key: value}}}.
add_filter('emporiqa_product_data', function ($data, $product) {
foreach ($data['attributes'] as $channel => &$languages) {
foreach ($languages as $lang => &$attrs) {
$attrs['material'] = get_field('material', $product->get_id());
}
}
return $data;
}, 10, 2);
Register your filters and actions in your theme's functions.php or a custom plugin.
WP-CLI Commands
The plugin registers a wp emporiqa command for automation and debugging. A reference is also available in the plugin's Sync tab.
# Sync all products
wp emporiqa sync-products
# Sync all pages
wp emporiqa sync-pages
# Full sync (products + pages)
wp emporiqa sync-all
# Test webhook connection (also available as a button in the Sync tab)
wp emporiqa test-connection
# Adjust batch size for large catalogs
wp emporiqa sync-products --batch-size=25
WP-CLI is the fastest way to seed large catalogs and to re-run syncs from your deployment pipeline. The admin Sync tab wraps the same underlying logic with a progress bar.
Order Tracking
Emporiqa can look up order status on behalf of customers during chat conversations. The plugin registers a signed REST route that WordPress calls when a customer asks about their order.
Flow
- Customer asks "Where is my order #12345?" in the chat.
- Emporiqa sends an HMAC-SHA256 signed POST to your store.
- The plugin looks up the order with
wc_get_order(), verifies the billing email matches, and returns the status. - The salesperson presents the order information to the customer.
Endpoint
POST /wp-json/emporiqa/api/order/tracking
Setup
The endpoint is always active once the plugin is installed. To enable order lookup from chat, set the Order Tracking API URL in your Emporiqa dashboard (Store Settings → Integration) to:
https://your-store.com/wp-json/emporiqa/api/order/tracking
Requests are authenticated using the same HMAC-SHA256 connection secret. Requests older than 5 minutes are rejected. See the Webhook Setup Guide for the full request/response schema.
Order tracking is optional. Without the dashboard URL configured, order questions route to the Customer Support agent instead.
Troubleshooting
Products not appearing in chat
- Run
wp emporiqa sync-allor use the Sync tab to force a full sync. - Verify products are published and visible on the storefront.
- Confirm your Store ID and Connection Secret match the dashboard.
- Verify your Emporiqa subscription is active.
Chat widget not showing
- Confirm the plugin is active and Store ID is configured.
- Clear any page caching plugins (WP Rocket, W3 Total Cache, LiteSpeed).
- Check that your theme calls
wp_footer(). - Check the browser console for JavaScript errors.
Sync not sending data
- Verify your server can make outbound HTTPS requests.
- Run
wp emporiqa test-connectionor click Test Connection in the Sync tab. - Enable
WP_DEBUG_LOGand checkwp-content/debug.logfor signed request failures. - Confirm Action Scheduler is processing (Tools → Scheduled Actions) — stalled actions block conversion events.
Variations not syncing
- Verify variations are published and have prices set.
- Save the parent variable product to trigger a re-sync.
- Run a full product sync from the Sync tab.
Related Articles
Chat for WooCommerce
Webhook sync, variable products, WP-CLI, customization with filters.
Multilingual Chat Support
Cross-language search, 65+ languages, how translations sync.
5 Questions Before You Pay
Evaluation checklist: data sync, handoff, pricing, languages, attribution.
Conversion Tracking
Prove chat ROI: session to cart to purchase attribution.