{"id":314655,"date":"2026-05-20T15:25:27","date_gmt":"2026-05-20T15:25:27","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/store-manager-bridge\/"},"modified":"2026-06-04T08:01:20","modified_gmt":"2026-06-04T08:01:20","slug":"opsassist-data-bridge-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/ky.wordpress.org\/plugins\/opsassist-data-bridge-for-woocommerce\/","author":23243374,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.5.24","stable_tag":"1.5.24","tested":"6.9.4","requires":"5.6","requires_php":"7.0","requires_plugins":null,"header_name":"OpsAssist Data Bridge for WooCommerce","header_author":"Ops Assist","header_description":"Companion plugin for the WC-Manager dashboard at wc-manager.com by Ops Assist. Exposes a small set of read-only REST endpoints that surface store data which is otherwise hidden from the standard WordPress REST API (POS outlets, registers, wallet balances). Install once and your dashboard syncs automatically.","assets_banners_color":"","last_updated":"2026-06-04 08:01:20","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wc-manager.com","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":312,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.0":{"tag":"1.2.0","author":"opsassistrsa","date":"2026-05-20 15:24:47"},"1.4.0":{"tag":"1.4.0","author":"opsassistrsa","date":"2026-05-20 16:04:04"},"1.4.3":{"tag":"1.4.3","author":"opsassistrsa","date":"2026-05-21 08:34:04"},"1.5.0":{"tag":"1.5.0","author":"opsassistrsa","date":"2026-05-31 17:16:27"},"1.5.10":{"tag":"1.5.10","author":"opsassistrsa","date":"2026-06-03 15:06:02"},"1.5.11":{"tag":"1.5.11","author":"opsassistrsa","date":"2026-06-03 16:05:40"},"1.5.12":{"tag":"1.5.12","author":"opsassistrsa","date":"2026-06-03 16:05:40"},"1.5.13":{"tag":"1.5.13","author":"opsassistrsa","date":"2026-06-03 16:05:40"},"1.5.14":{"tag":"1.5.14","author":"opsassistrsa","date":"2026-06-03 16:24:23"},"1.5.15":{"tag":"1.5.15","author":"opsassistrsa","date":"2026-06-03 16:45:50"},"1.5.16":{"tag":"1.5.16","author":"opsassistrsa","date":"2026-06-03 17:00:46"},"1.5.17":{"tag":"1.5.17","author":"opsassistrsa","date":"2026-06-03 18:08:26"},"1.5.18":{"tag":"1.5.18","author":"opsassistrsa","date":"2026-06-03 19:32:59"},"1.5.19":{"tag":"1.5.19","author":"opsassistrsa","date":"2026-06-03 19:51:21"},"1.5.20":{"tag":"1.5.20","author":"opsassistrsa","date":"2026-06-04 05:00:47"},"1.5.21":{"tag":"1.5.21","author":"opsassistrsa","date":"2026-06-04 05:27:49"},"1.5.22":{"tag":"1.5.22","author":"opsassistrsa","date":"2026-06-04 06:03:07"},"1.5.23":{"tag":"1.5.23","author":"opsassistrsa","date":"2026-06-04 07:11:12"},"1.5.24":{"tag":"1.5.24","author":"opsassistrsa","date":"2026-06-04 08:01:20"},"1.5.3":{"tag":"1.5.3","author":"opsassistrsa","date":"2026-06-01 10:17:01"},"1.5.4":{"tag":"1.5.4","author":"opsassistrsa","date":"2026-06-01 11:09:48"},"1.5.5":{"tag":"1.5.5","author":"opsassistrsa","date":"2026-06-03 12:49:23"},"1.5.6":{"tag":"1.5.6","author":"opsassistrsa","date":"2026-06-03 12:49:23"},"1.5.7":{"tag":"1.5.7","author":"opsassistrsa","date":"2026-06-03 12:49:23"},"1.5.8":{"tag":"1.5.8","author":"opsassistrsa","date":"2026-06-03 12:49:23"},"1.5.9":{"tag":"1.5.9","author":"opsassistrsa","date":"2026-06-03 15:06:02"}},"upgrade_notice":{"1.5.24":"<p>Telegram order.completed + order.refunded alerts now include the itemised line list (was only on new-order alerts). Recommended for any store with POS Telegram alerts wired up.<\/p>","1.5.23":"<p>First-run UX: until you paste a WC-Manager plugin token, the sidebar only shows the Connection tab. Removes the dead-click &quot;Sorry, you are not allowed&quot; loop when modules try to talk to the dashboard before linking.<\/p>","1.5.22":"<p>Telegram alerts now fire reliably for OpenPOS sales (previously silent because OpenPOS bypasses WooCommerce&#039;s standard new-order hook). Recommended upgrade for any store with POS tills wired to Telegram.<\/p>","1.5.21":"<p>Telegram messages now show register \/ outlet \/ cashier names + an itemised line list. Per-channel register whitelist lets you wire a test till to one chat and production tills to another.<\/p>","1.5.20":"<p>Telegram now labels WC-Manager manual orders correctly in the message title (created via the dashboard&#039;s new + New order button).<\/p>","1.5.19":"<p>Clean re-tag of 1.5.18. If your store is stuck on a stale 1.5.18 (because the original tag was committed before its content), this update will reliably replace it. Same code, fresh tag.<\/p>","1.5.18":"<p>Fixes &quot;manual Test works but real orders don&#039;t&quot; \u2014 channel list now stored in wp_options so the dispatch is fully offline-from-WP for config. Adds debug log lines for every order-hook attempt and declares HPOS compatibility.<\/p>","1.5.17":"<p>Bot token is now cached in wp_options the moment you connect, so order alerts keep firing even on a transient cURL\/DNS hiccup. Connected state has Refresh + Delink buttons. Token rejections auto-clear instead of pretending you&#039;re connected.<\/p>","1.5.16":"<p>Major reliability fix for Telegram alerts \u2014 hooks 5 different WooCommerce actions so PayFast, async redirects, COD and other gateways all trigger alerts correctly. Per-order dedup means no duplicate messages. Plus a &quot;Send test alert&quot; button to verify the full pipeline.<\/p>","1.5.15":"<p>Fixes the &quot;Sorry, you are not allowed&quot; error on the new Connection page (submenu priority) and surfaces in-progress stocktakes correctly on the Stock Take page (parsing fix).<\/p>","1.5.14":"<p>New dedicated Connection page for the plugin token, plus the same paste card surfaces on the Telegram page when needed. Stock Take menu is now a real stocktake interface (token settings moved out). Existing tokens are kept \u2014 no re-setup needed.<\/p>","1.5.13":"<p>Telegram alerts now send direct from WP and auto-fetch the bot token from your WC-Manager dashboard \u2014 nothing to paste in WP. Set TELEGRAM_BOT_TOKEN on the dashboard once and every store linked to it gets alerts.<\/p>","1.5.12":"<p>New &quot;Direct Telegram mode&quot; \u2014 paste your bot token in WC-Manager \u2192 Telegram and alerts send straight from WP. Bypasses the dashboard webhook for maximum reliability. Channels still managed in the dashboard, in sync.<\/p>","1.5.11":"<p>Telegram forwarder defaults to ON for both &quot;New order&quot; AND &quot;Order status changed&quot;, so completed\/paid-order alerts work out of the box. Existing installs keep their saved preference \u2014 if completed alerts aren&#039;t firing for you, tick &quot;Order status changed&quot; under WC-Manager \u2192 Telegram.<\/p>","1.5.10":"<p>Readme refresh \u2014 Telegram alerts and Customer Notes are now prominent in the feature list. No functional changes; safe to skip if you already updated to 1.5.9.<\/p>","1.5.9":"<p>Cleaner Telegram channel form \u2014 hides the order-status picker for events that already imply a status.<\/p>","1.5.8":"<p>Fixes the Telegram bot link to use the correct @wc_manager_bot handle.<\/p>","1.5.7":"<p>The Telegram Alerts page now mirrors the full dashboard channel manager \u2014 add and edit chats directly from WP admin. No re-setup needed if you already pasted your plugin token under Stock Take.<\/p>","1.5.6":"<p>Adds the new Telegram Alerts module \u2014 instant order notifications to any Telegram chat (group, channel or DM) via the WC-Manager bot. Free; sub-second alerts on every checkout. Set up at WC-Manager &rarr; Telegram.<\/p>","1.5.5":"<p>Adds the new Customer Notes &amp; Tags module \u2014 per-customer notes and labels (VIP, Wholesale, Prefers WhatsApp&hellip;) right inside WP admin, with a new REST endpoint for the WC-Manager dashboard to sync the same annotations.<\/p>","1.5.4":"<p>Dark + purple admin theme to match the WC-Manager dashboard, plus live SKU lookup on the Purchase Order builder (shows the product name and current stock as you type) and an OpenPOS-outlet auto-mirror so the Warehouses page is no longer empty if you already use OpenPOS.<\/p>","1.5.3":"<p>Adds a new no-stock sync endpoint so the WC-Manager dashboard can mirror its own receive and return flows into the plugin&#039;s PO status (draft \u2192 sent \u2192 partial \u2192 received) without double-counting WooCommerce stock. Recommended for anyone using the dashboard alongside this plugin.<\/p>","1.5.2":"<p>Adds the REST endpoints the WC-Manager dashboard uses to sync your Suppliers and Purchase Orders both ways. Required if you want the dashboard&#039;s Suppliers \/ POs pages to mirror what you have in WP admin. Uses the existing WooCommerce REST key \u2014 no new connection setup.<\/p>","1.5.1":"<p>Renames the top-level admin menu to &quot;WC-Manager&quot; (was &quot;OpsAssist&quot;) and adds REST endpoints for the procurement modules so the WC-Manager dashboard can read and write the same suppliers, warehouses and purchase orders. No new connection key required \u2014 uses the WooCommerce REST consumer key you&#039;ve already set up.<\/p>","1.5.0":"<p>Adds free built-in <strong>Procurement<\/strong> to the WP admin: Suppliers, Warehouses and Purchase Orders, all under a new <strong>OpsAssist<\/strong> top-level menu. The Stock Take settings page moves out of the WooCommerce submenu into OpsAssist \u203a Stock Take. Tables are created automatically on upgrade \u2014 no manual setup.<\/p>","1.4.3":"<p>Recommended if your dashboard reports the plugin as &quot;not detected&quot; despite being active \u2014 adds a custom-header auth method that bypasses Basic-Auth\/security plugins which block the standard Authorization header.<\/p>","1.4.2":"<p>Important fix for &quot;plugin not detected&quot; \u2014 the endpoints now authenticate on servers that strip the Authorization header, the same way WooCommerce&#039;s own REST API does.<\/p>","1.4.1":"<p>Recommended update. Adds a safety guard so an incomplete upload can never cause a fatal error on your site.<\/p>","1.4.0":"<p>You can now remove the WordPress Application Password from your WC-Manager store connection \u2014 the plugin authenticates with your WooCommerce API key alone.<\/p>","1.3.0":"<p>Adds membership endpoints and merges the Members and Stock Take OpenPOS panels into one plugin. If you used the standalone &quot;WC-Manager: Members&quot; or &quot;WC-Manager: Stock Take&quot; plugins, deactivate them after upgrading \u2014 their functionality now lives here.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3541147,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3541147,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3541147,"resolution":false,"location":"assets","locale":false}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.0","1.4.0","1.4.3","1.5.0","1.5.10","1.5.11","1.5.12","1.5.13","1.5.14","1.5.15","1.5.16","1.5.17","1.5.18","1.5.19","1.5.20","1.5.21","1.5.22","1.5.23","1.5.24","1.5.3","1.5.4","1.5.5","1.5.6","1.5.7","1.5.8","1.5.9"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"The Members panel inside the OpenPOS terminal.","2":"The Stock Take panel inside the OpenPOS terminal."}},"plugin_section":[],"plugin_tags":[6601,252293,150354,8370,286],"plugin_category":[36,45],"plugin_contributors":[263714],"plugin_business_model":[],"class_list":["post-314655","plugin","type-plugin","status-publish","hentry","plugin_tags-inventory","plugin_tags-multi-warehouse","plugin_tags-purchase-orders","plugin_tags-suppliers","plugin_tags-woocommerce","plugin_category-analytics","plugin_category-ecommerce","plugin_contributors-opsassistrsa","plugin_committers-opsassistrsa"],"banners":[],"icons":{"svg":"https:\/\/ps.w.org\/opsassist-data-bridge-for-woocommerce\/assets\/icon.svg?rev=3541147","icon":"https:\/\/ps.w.org\/opsassist-data-bridge-for-woocommerce\/assets\/icon.svg?rev=3541147","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>Run a complete supplier-to-shelf workflow inside WordPress \u2014 free, with no monthly fee and no SaaS account required.<\/strong> Built specifically for WooCommerce stores that have outgrown basic stock management but don't want to pay enterprise prices for inventory software.<\/p>\n\n<p>Create purchase orders by SKU, send them to suppliers, receive stock in one click, and watch WooCommerce stock counts update automatically \u2014 including per-warehouse counts if you run multiple locations or use OpenPOS. All from a clean new <strong>WC-Manager<\/strong> menu in your WordPress admin.<\/p>\n\n<h4>Free forever. Why?<\/h4>\n\n<p>We build a paid SaaS dashboard at <a href=\"https:\/\/wc-manager.com\">wc-manager.com<\/a> that adds AI insights, reports, restock forecasting and live POS feeds on top of the same data. The procurement modules in this plugin stay free for everyone \u2014 most stores need basic purchase orders before they need analytics, and we'd rather earn your trust now than charge you for the basics.<\/p>\n\n<h4>What you get, for free<\/h4>\n\n<p><strong>Purchase Orders<\/strong>\n* Build a PO by SKU \u2014 variations fully supported.\n* Mark as draft, send, partial, received or cancelled with a clear status workflow.\n* Receive in one click \u2014 WooCommerce <code>stock_quantity<\/code>, <code>manage_stock<\/code> and <code>stock_status<\/code> are bumped automatically.\n* Per-warehouse stock updates if the receiving warehouse is mapped to an OpenPOS outlet (the <code>_op_qty_warehouse_{id}<\/code> meta OpenPOS uses).\n* Auto-generated PO numbers (<code>PO-00001<\/code>, <code>PO-00002<\/code>, ...).\n* Notes, line-item costs and a running subtotal.<\/p>\n\n<p><strong>Suppliers directory<\/strong>\n* Name, email, phone, payment terms and lead time.\n* Keep all your supplier contacts in one place \u2014 no more digging through emails or spreadsheets.<\/p>\n\n<p><strong>Warehouses \/ stock locations<\/strong>\n* Define your physical stock locations.\n* Optionally map each one to an existing OpenPOS outlet so receives write to the same per-location meta key OpenPOS already uses \u2014 no double counting, no drift.<\/p>\n\n<p><strong>Secure REST API<\/strong>\n* Endpoints under <code>\/wp-json\/woo-manager\/v1\/<\/code> for suppliers, warehouses and purchase orders (GET, POST, PUT, DELETE).\n* Authenticates with your existing <strong>WooCommerce REST consumer key<\/strong> \u2014 no new connection key, no WordPress Application Password.\n* Read-only data endpoints for OpenPOS outlets\/registers, TeraWallet\/WooWallet balances and WooCommerce Memberships (data WooCommerce's standard REST API can't see).<\/p>\n\n<p><strong>OpenPOS terminal panels (optional)<\/strong>\n* <strong>Members panel<\/strong> \u2014 cashiers look up a customer at the register and see their active WooCommerce Memberships.\n* <strong>Stock Take panel<\/strong> \u2014 run a category-by-category count at the register; counts auto-save.<\/p>\n\n<p><strong>Telegram alerts (free)<\/strong>\n* Real-time notifications for every new WooCommerce order to any Telegram chat \u2014 group, channel or DM \u2014 via the WC-Manager bot.\n* Hooks <code>woocommerce_new_order<\/code> (and optionally <code>woocommerce_order_status_changed<\/code>) and forwards instantly \u2014 sub-second alerts on every checkout.\n* Manage chats from WP admin (WC-Manager &rarr; Telegram): chat ID, events (new \/ completed \/ refunded \/ PO received \/ low stock \/ new customer), order-status filter, <strong>POS-only vs Online-only<\/strong> filter (when OpenPOS is detected), minimum order total, custom HTML template.\n* Same config syncs with the WC-Manager dashboard \u2014 manage from either place.\n* Customer notes &amp; tags syncing (VIP, wholesale, prefers WhatsApp, at risk, etc.) keyed by email so guest checkouts are annotatable too \u2014 managed under <em>WC-Manager &rarr; Customer Notes<\/em>.<\/p>\n\n<p>Install once, activate. There is nothing to configure for the free procurement features.<\/p>\n\n<h4>Problems this plugin solves<\/h4>\n\n<ul>\n<li>\"I can't manage purchase orders inside WooCommerce.\" \u2192 Built-in PO module, free.<\/li>\n<li>\"I lose track of which supplier sent which order.\" \u2192 Suppliers directory linked to every PO.<\/li>\n<li>\"Stock at my second outlet is invisible from WP admin.\" \u2192 Multi-warehouse, with OpenPOS outlet sync.<\/li>\n<li>\"Receiving stock means hand-editing every product.\" \u2192 One-click receive bumps WC stock automatically.<\/li>\n<li>\"I want to know the second an order comes in.\" \u2192 Free Telegram alerts to your phone, group, or warehouse screen \u2014 sub-second.<\/li>\n<li>\"Different staff use different spreadsheets.\" \u2192 One source of truth, in WordPress, with the rest of your store.<\/li>\n<\/ul>\n\n<h4>Optional upgrade \u2014 WC-Manager dashboard<\/h4>\n\n<p>Want analytics and AI on top of all this? Connect a free WC-Manager account at <a href=\"https:\/\/wc-manager.com\">wc-manager.com<\/a> and the same suppliers, POs and warehouses sync both ways with our hosted dashboard, which adds:<\/p>\n\n<ul>\n<li><strong>AI Insights<\/strong> \u2014 plain-English summary of your sales, customers and POS data with action list and business valuation.<\/li>\n<li><strong>AI product descriptions<\/strong> \u2014 generate SEO-ready copy in your chosen tone and push to WooCommerce in one click.<\/li>\n<li><strong>Reports<\/strong> \u2014 profit by month or year, units sold, order-timing heatmap, repeat-buyer rate and customer lifetime value.<\/li>\n<li><strong>Multi-location stock transfers<\/strong> \u2014 move inventory between warehouses with full audit trail.<\/li>\n<li><strong>Restock Predictor<\/strong> \u2014 velocity-based reorder forecasts so you never run out of best sellers.<\/li>\n<li><strong>Spreadsheet product editing<\/strong> \u2014 bulk-edit prices, stock, supplier prices and meta fields.<\/li>\n<li><strong>Live POS feed<\/strong> \u2014 real-time sales view across all outlets and registers.<\/li>\n<li><strong>Membership management, category stock takes, full activity log, team access.<\/strong><\/li>\n<\/ul>\n\n<p>Free plan available. No credit card to start.<\/p>\n\n<h4>Works great with<\/h4>\n\n<ul>\n<li><strong>OpenPOS<\/strong> \u2014 outlets, registers, the in-terminal Members &amp; Stock Take panels, and per-warehouse stock that stays in sync with the same meta key OpenPOS uses (<code>_op_qty_warehouse_{id}<\/code>).<\/li>\n<li><strong>WooCommerce Memberships<\/strong> \u2014 read plans and per-customer memberships.<\/li>\n<li><strong>TeraWallet \/ WooWallet<\/strong> \u2014 read store-credit balances.<\/li>\n<li><strong>Telegram<\/strong> \u2014 instant order notifications via the WC-Manager bot (<a href=\"https:\/\/t.me\/wc_manager_bot\">@wc_manager_bot<\/a>) \u2014 add it to any group, channel or DM, send <code>\/id<\/code>, paste into the plugin's Telegram page.<\/li>\n<li>Works on any store running standard WooCommerce too \u2014 the optional integrations only activate when their host plugin is present.<\/li>\n<\/ul>\n\n<h4>REST endpoints<\/h4>\n\n<p>All endpoints authenticate with your existing <strong>WooCommerce REST consumer key<\/strong> (or any logged-in user with the <code>manage_woocommerce<\/code> capability). No separate connection key needed.<\/p>\n\n<p><strong>Procurement (free):<\/strong><\/p>\n\n<ul>\n<li><code>GET, POST \/wp-json\/woo-manager\/v1\/suppliers<\/code> \u2014 list \/ create suppliers.<\/li>\n<li><code>GET, PUT, DELETE \/wp-json\/woo-manager\/v1\/suppliers\/{id}<\/code> \u2014 read \/ update \/ delete one supplier.<\/li>\n<li><code>GET \/wp-json\/woo-manager\/v1\/warehouses<\/code> \u2014 list warehouses.<\/li>\n<li><code>GET, POST \/wp-json\/woo-manager\/v1\/purchase-orders<\/code> \u2014 list \/ create POs.<\/li>\n<li><code>GET, DELETE \/wp-json\/woo-manager\/v1\/purchase-orders\/{id}<\/code> \u2014 read \/ delete one PO.<\/li>\n<li><code>POST \/wp-json\/woo-manager\/v1\/purchase-orders\/{id}\/send<\/code> \u2014 mark a PO as sent.<\/li>\n<li><code>POST \/wp-json\/woo-manager\/v1\/purchase-orders\/{id}\/cancel<\/code> \u2014 cancel a PO.<\/li>\n<li><code>POST \/wp-json\/woo-manager\/v1\/purchase-orders\/{id}\/receive<\/code> \u2014 receive stock (updates WooCommerce stock + per-warehouse meta).<\/li>\n<li><code>POST \/wp-json\/woo-manager\/v1\/purchase-orders\/{id}\/sync-receive<\/code> \u2014 bump <code>qty_received<\/code> without touching WooCommerce stock (used when the dashboard already updated stock itself).<\/li>\n<\/ul>\n\n<p><strong>OpenPOS, wallet &amp; membership reads:<\/strong><\/p>\n\n<ul>\n<li><code>GET \/wp-json\/woo-manager\/v1\/openpos-outlets<\/code> \u2014 OpenPOS outlets (<code>_op_warehouse<\/code> posts).<\/li>\n<li><code>GET \/wp-json\/woo-manager\/v1\/openpos-registers<\/code> \u2014 OpenPOS registers (<code>_op_register<\/code> posts).<\/li>\n<li><code>GET \/wp-json\/woo-manager\/v1\/terawallet\/balances<\/code> \u2014 users with a non-zero TeraWallet balance.<\/li>\n<li><code>GET \/wp-json\/woo-manager\/v1\/terawallet\/balance\/{user_id}<\/code> \u2014 a single user's TeraWallet balance.<\/li>\n<li><code>GET \/wp-json\/woo-manager\/v1\/memberships\/plans<\/code> \u2014 WooCommerce Memberships plans.<\/li>\n<li><code>GET \/wp-json\/woo-manager\/v1\/memberships\/user\/{user_id}<\/code> \u2014 a user's memberships.<\/li>\n<\/ul>\n\n<h4>OpenPOS panels (optional)<\/h4>\n\n<ul>\n<li><strong>Members<\/strong> \u2014 cashiers can look up a customer at the register and see their active WooCommerce Memberships.<\/li>\n<li><strong>Stock Take<\/strong> \u2014 run a category-by-category stock count at the register; counts auto-save and sync to the WC-Manager web app.<\/li>\n<\/ul>\n\n<h4>External service<\/h4>\n\n<p>The Stock Take panel communicates with the WC-Manager web app at <strong>https:\/\/wc-manager.com<\/strong> to load and save stock takes for your organisation. It authenticates with a per-organisation \"plugin token\" you paste into the plugin's settings page (WooCommerce \u2192 WC-Manager Stock Take). No data is sent until you configure that token and use the Stock Take panel. WC-Manager's terms and privacy policy: <a href=\"https:\/\/wc-manager.com\/terms\">https:\/\/wc-manager.com\/terms<\/a> and <a href=\"https:\/\/wc-manager.com\/privacy\">https:\/\/wc-manager.com\/privacy<\/a>.<\/p>\n\n<p>The REST endpoints, the Members panel, and TeraWallet\/membership reads make no external requests \u2014 they only respond to authenticated requests into your own site.<\/p>\n\n<h4>Privacy<\/h4>\n\n<p>This plugin does not collect, store, or transmit personal data on its own beyond the Stock Take sync described above, which only sends the stock-count data you create to your own WC-Manager account. See <a href=\"https:\/\/wc-manager.com\/privacy\">https:\/\/wc-manager.com\/privacy<\/a>.<\/p>\n\n<h4>Note on trademarks<\/h4>\n\n<p>WooCommerce is a registered trademark of Automattic Inc. This plugin is an independent companion plugin and is not affiliated with or endorsed by Automattic. OpenPOS and TeraWallet are products of their respective owners. WC-Manager is a separate product by Ops Assist.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install via <em>Plugins \u2192 Add New<\/em> in your WordPress admin (search \"WC-Manager\") or upload the plugin zip.<\/li>\n<li>Activate. A new <strong>WC-Manager<\/strong> menu appears in the WordPress sidebar.<\/li>\n<li>Go to <strong>WC-Manager \u2192 Suppliers<\/strong> to start adding suppliers, then <strong>Purchase Orders<\/strong> to create your first PO. No further configuration required.<\/li>\n<li>(Optional) Sign up for a free <a href=\"https:\/\/wc-manager.com\">WC-Manager dashboard<\/a> account if you want AI insights, reports and a SaaS view of your data. Your suppliers and POs will sync both ways automatically using your existing WooCommerce REST consumer key \u2014 no new connection key, no Application Password.<\/li>\n<li>(Optional) To use the Stock Take panel inside the OpenPOS terminal, go to <strong>WC-Manager \u2192 Stock Take<\/strong> and paste your plugin connection token from the WC-Manager dashboard.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"are%20the%20procurement%20features%20really%20free%3F\"><h3>Are the procurement features really free?<\/h3><\/dt>\n<dd><p>Yes. Purchase orders, suppliers, warehouses and one-click receive are 100% free, with no usage limits, forever. We make money from the optional WC-Manager dashboard (AI insights, reports, multi-location transfers) \u2014 but the procurement workflow in WP admin is yours to use at no cost.<\/p><\/dd>\n<dt id=\"do%20i%20need%20a%20wc-manager%20account%20to%20use%20the%20purchase%20orders%3F\"><h3>Do I need a WC-Manager account to use the purchase orders?<\/h3><\/dt>\n<dd><p>No. The free procurement modules work entirely inside WordPress with no account, no API call out and no payment. Connect a WC-Manager account only if you want the optional dashboard features on top.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20stock-managed%20products%20and%20variations%3F\"><h3>Does it work with stock-managed products and variations?<\/h3><\/dt>\n<dd><p>Yes. POs accept any WooCommerce product or variation by SKU (or by product\/variation ID). Receiving updates <code>stock_quantity<\/code>, sets <code>manage_stock<\/code>, and recomputes <code>stock_status<\/code> automatically. WooCommerce product transients are cleared so the front-end stays accurate.<\/p><\/dd>\n<dt id=\"can%20i%20manage%20inventory%20across%20multiple%20warehouses%20or%20outlets%3F\"><h3>Can I manage inventory across multiple warehouses or outlets?<\/h3><\/dt>\n<dd><p>Yes. Define warehouses under <strong>WC-Manager \u2192 Warehouses<\/strong>. If a warehouse is mapped to an OpenPOS outlet, receives also write to the per-outlet meta key OpenPOS uses (<code>_op_qty_warehouse_{id}<\/code>) \u2014 so OpenPOS sees the new stock instantly with no sync step.<\/p><\/dd>\n<dt id=\"how%20is%20this%20different%20from%20a%20woocommerce%20inventory%20plugin%20like%20atum%20or%20stock%20manager%3F\"><h3>How is this different from a WooCommerce inventory plugin like ATUM or Stock Manager?<\/h3><\/dt>\n<dd><p>This plugin is purpose-built for stores that want a simple, clean purchase-order workflow without paying a monthly enterprise subscription, and that want optional cloud analytics on the same data. It's lightweight, ships only the modules listed above, and integrates directly with OpenPOS for per-location stock.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20openpos%2C%20woocommerce%20memberships%2C%20terawallet%20and%20woowallet%3F\"><h3>Does it work with OpenPOS, WooCommerce Memberships, TeraWallet and WooWallet?<\/h3><\/dt>\n<dd><p>Yes. OpenPOS is the deepest integration (outlet sync, in-terminal Members and Stock Take panels). Memberships and TeraWallet\/WooWallet get read-only REST endpoints so the WC-Manager dashboard can show member status and store-credit balances. The plugin works fine on stores without any of these \u2014 those features simply stay dormant.<\/p><\/dd>\n<dt id=\"is%20my%20store%20data%20safe%3F\"><h3>Is my store data safe?<\/h3><\/dt>\n<dd><p>Yes. Procurement data lives in your own database in tables prefixed <code>wp_oadb_<\/code>. REST endpoints authenticate with your existing WooCommerce REST consumer key \u2014 no public endpoints, no third-party services. The Stock Take sync only fires after you explicitly paste a connection token in settings.<\/p><\/dd>\n<dt id=\"will%20this%20plugin%20slow%20down%20my%20store%3F\"><h3>Will this plugin slow down my store?<\/h3><\/dt>\n<dd><p>No. Admin pages only load when an admin opens them. REST endpoints respond only to authenticated requests. The wallet-balances query is cached for one minute. There is no front-end overhead at all.<\/p><\/dd>\n<dt id=\"how%20do%20i%20uninstall%3F\"><h3>How do I uninstall?<\/h3><\/dt>\n<dd><p>Deactivate and delete via WordPress <strong>Plugins<\/strong>. The procurement tables (<code>wp_oadb_suppliers<\/code>, <code>wp_oadb_warehouses<\/code>, <code>wp_oadb_pos<\/code>, <code>wp_oadb_po_items<\/code>) stay in place so you don't lose your supplier list and PO history; drop them manually if you want a fully clean removal.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.5.24<\/h4>\n\n<ul>\n<li><strong>Itemised line list on all order Telegram alerts<\/strong> (was new-order only). The default templates for <em>order.completed<\/em> and <em>order.refunded<\/em> now include <code>{{items.lines}}<\/code> so POS sales \u2014 which fire both <em>order.new<\/em> at processing and <em>order.completed<\/em> when finalised \u2014 list every item on every alert, not just the first one.<\/li>\n<\/ul>\n\n<h4>1.5.23<\/h4>\n\n<ul>\n<li><strong>First-run lockdown until connected.<\/strong> When no WC-Manager plugin token is saved, the sidebar now hides every other WC-Manager submenu (Suppliers, Purchase Orders, Warehouses, Customer Notes, Telegram, Stock Take, Home) and any direct navigation to them redirects to the Connection tab with a warning banner. Removes the confusion of clicking around modules that can't work until the token is pasted. Once a token is saved the lockdown lifts immediately \u2014 no other behaviour changes.<\/li>\n<\/ul>\n\n<h4>1.5.22<\/h4>\n\n<ul>\n<li><strong>Telegram alerts now fire for OpenPOS sales.<\/strong> Previously, alerts were silent for tills because OpenPOS bypasses the standard <code>woocommerce_new_order<\/code> hook and writes <code>shop_order<\/code> posts directly. Added catch-all <code>save_post_shop_order<\/code> + <code>transition_post_status<\/code> hooks (filtered tightly to <code>shop_order<\/code> at priority 99, autosave\/revision\/auto-draft excluded), plus five known OpenPOS action variants (<code>op_after_create_order<\/code>, <code>openpos_after_create_order<\/code>, <code>op_after_order_create<\/code>, <code>op_order_created<\/code>, <code>op_save_order<\/code>). Whichever fires reaches dispatch; the existing per-(order, event) dedup transient prevents duplicates. Covers the typical POS flow of <em>pending \u2192 processing \u2192 completed<\/em> in one go.<\/li>\n<\/ul>\n\n<h4>1.5.21<\/h4>\n\n<ul>\n<li><strong>Telegram: per-channel POS register whitelist.<\/strong> When a channel's source is <em>POS only<\/em> or <em>Both<\/em>, you can now pick exactly which OpenPOS registers fire alerts for that channel \u2014 empty = all registers. Useful for wiring a \"test till\" channel separately from production tills, or routing till-1 alerts to one chat and till-2 to another. Pulls register names from your OpenPOS <code>_op_register<\/code> CPT so the picker shows friendly labels not IDs.<\/li>\n<li><strong>Telegram: register, outlet, cashier in messages.<\/strong> New template tokens <code>{{pos.register}}<\/code>, <code>{{pos.outlet}}<\/code>, <code>{{cashier.name}}<\/code>, plus a compact <code>{{pos.summary}}<\/code> that renders \"Register: Till 2 \u00b7 Cashier: Sarah \u00b7 Outlet: Main Store\" (empty for non-POS orders). Default templates updated to include the summary.<\/li>\n<li><strong>Telegram: itemised line list in messages.<\/strong> New <code>{{items.lines}}<\/code> token renders each ordered line on its own bullet (e.g. \"\u2022 2\u00d7 Coffee Beans \u00b7 \u2022 1\u00d7 French Press\"). Default <em>order.new<\/em> template now shows the full list instead of just a 3-item summary.<\/li>\n<\/ul>\n\n<h4>1.5.20<\/h4>\n\n<ul>\n<li><strong>Telegram: WC-Manager manual orders are now labelled correctly.<\/strong> Orders created via the dashboard's new \"+ New order\" button (tagged <code>created_via=wc-manager<\/code> \/ <code>_wcm_source=manual<\/code>) render in templates with <code>{{source.kind}}<\/code> = \"WC-Manager manual\", so the message title reads \"New WC-Manager manual order #1234\" instead of just \"New Online order\".<\/li>\n<li>Removed the daily WP-Cron token refresh. Bot token is saved locally when you link, and re-pulled only when you click \"Refresh bot token\" \u2014 clearer mental model, less moving parts.<\/li>\n<\/ul>\n\n<h4>1.5.19<\/h4>\n\n<ul>\n<li>Re-release of 1.5.18 with a fresh tag \u2014 an earlier SVN deploy committed a partial \/ stale 1.5.18 tag before the working copy locks could be cleared. This version is the same code under a clean tag so WordPress' auto-update reliably picks it up.<\/li>\n<\/ul>\n\n<h4>1.5.18<\/h4>\n\n<ul>\n<li><strong>Channels stored locally too<\/strong> \u2014 alongside the bot token, the channel list is now pulled into <code>wp_options<\/code> on connect \/ Refresh \/ daily cron. The order-hook dispatch is now fully network-free for config: zero outbound HTTP calls for credentials or routing, only the final Telegram API send. This is the root cause of \"manual test works but real orders don't\" \u2014 the per-order fetch was failing silently on hosts with cURL\/DNS hiccups.<\/li>\n<li><strong>Debug logging on the dispatch path<\/strong> \u2014 every order hook now writes a line to <code>wp-content\/debug.log<\/code> (with <code>WP_DEBUG_LOG=true<\/code>): \"dispatch fire\", \"dispatch ok \/ fail to chat X\", \"dispatch skip \u2014 no bot token\", \"dispatch skip \u2014 0 channels matched\". Lets you tail one file and immediately see why an order didn't alert.<\/li>\n<li><strong>HPOS compatibility declared<\/strong> \u2014 runs on stores with WC's High-Performance Order Storage enabled without throwing the incompatibility warning.<\/li>\n<\/ul>\n\n<h4>1.5.17<\/h4>\n\n<ul>\n<li><strong>Bot token is now cached locally<\/strong> on plugin-token save. The dashboard's <code>TELEGRAM_BOT_TOKEN<\/code> env value is pulled into <code>wp_options<\/code> the moment you connect, so the order-hook dispatch never touches the network for credentials \u2014 alerts keep firing even if your host has a transient DNS\/cURL hiccup. Auto-refreshes daily via WP-Cron; manual <strong>Refresh bot token<\/strong> button on the Connection page picks up rotations immediately.<\/li>\n<li><strong>Connected state is now lock-edit<\/strong> \u2014 once a valid token is saved you see a status card (plugin token tail, bot username, last-synced time) plus <strong>Refresh<\/strong> and <strong>Delink<\/strong> buttons. To change the token, click Delink first. Prevents accidental token changes.<\/li>\n<li><strong>Auto-bail on rejected tokens<\/strong> \u2014 if the dashboard responds 401 during the initial fetch, the saved token is cleared rather than left in a \"saved but doesn't work\" limbo.<\/li>\n<\/ul>\n\n<h4>1.5.16<\/h4>\n\n<ul>\n<li><strong>Reliable Telegram alerts<\/strong> \u2014 now hooks five WooCommerce actions at priority 99 (<code>woocommerce_new_order<\/code>, <code>checkout_order_processed<\/code>, <code>thankyou<\/code>, <code>payment_complete<\/code>, <code>order_status_changed<\/code>) with per-(order, event) dedup. Previously only <code>new_order<\/code> fired, which some payment gateways (PayFast, async redirects, COD) don't reach reliably \u2014 so paid orders silently never alerted. Multiple hooks now mean any path through checkout triggers exactly one Telegram message per status flavour.<\/li>\n<li><strong>\"Send test alert\" button<\/strong> on the Telegram page that runs the full direct-send pipeline (bot token fetch \u2192 channel match \u2192 Telegram API) using your most recent real order. Surfaces a per-chat success\/failure summary inline so you know exactly which channel didn't receive (and why).<\/li>\n<li><strong>Better diagnostics on the channels list<\/strong> \u2014 retries the dashboard fetch on transient cURL errors (DNS exhaustion, \"thread failed to start\" on shared hosts), falls back to a 24h cached copy so the list doesn't go blank on a blip, and shows specific host-side troubleshooting tips when cURL error 6 is detected.<\/li>\n<\/ul>\n\n<h4>1.5.15<\/h4>\n\n<ul>\n<li>Fix: Connection page returned \"Sorry, you are not allowed to access this page\" \u2014 the submenu was registered before its parent menu existed. Adjusted hook priority so the parent always comes first.<\/li>\n<li>Fix: Stock Take page wasn't listing in-progress stocktakes \u2014 the dashboard returns <code>{ stocktakes, outlets }<\/code> and the plugin was iterating the outer object instead of the inner array. Now reads <code>.stocktakes<\/code>, drops the fake count columns, and renders the real fields (outlet, started by, started, last updated).<\/li>\n<\/ul>\n\n<h4>1.5.14<\/h4>\n\n<ul>\n<li><strong>New: Connection page<\/strong> (WC-Manager &rarr; Connection) \u2014 dedicated home for the plugin token with paste \/ save \/ validate \/ clear, mirroring the dashboard's Plugin Connection card. One token powers every WC-Manager feature (Telegram, customer notes, stocktake sync, supplier &amp; PO sync) so this is now the single place to configure it.<\/li>\n<li><strong>Token paste also embedded on the Telegram page<\/strong> \u2014 if the bot can't connect, the same token card shows inline so you don't have to bounce pages.<\/li>\n<li><strong>Stock Take page is now an actual stocktake interface<\/strong> \u2014 lists in-progress stocktakes pulled live from the dashboard, with shortcuts to start one at the till (OpenPOS) or in the dashboard for the full UI. Token settings removed from here (lives on the Connection page now).<\/li>\n<\/ul>\n\n<h4>1.5.13<\/h4>\n\n<ul>\n<li>Telegram alerts simplified: always send <strong>direct from WP<\/strong>, no forwarder fallback, no bot token to paste. Plugin auto-fetches the token from WC-Manager (env var <code>TELEGRAM_BOT_TOKEN<\/code> on the dashboard) using your existing plugin token, cached for 5 min. Channels still configured in the dashboard and synced to WP admin. Sub-second alerts; admin never handles the secret.<\/li>\n<\/ul>\n\n<h4>1.5.12<\/h4>\n\n<ul>\n<li><strong>Direct Telegram mode<\/strong> \u2014 paste your Telegram bot token under <em>WC-Manager &rarr; Telegram<\/em> and the plugin sends alerts <strong>straight to Telegram from WP<\/strong> on every order, skipping the dashboard webhook entirely. Fewer failure points (no Vercel env to configure, no webhook URL, no proxy to whitelist) and a more reliable sub-second alert path. Falls back to the forwarder if you leave the token blank. Channels (chat IDs, events, filters, templates) still managed in the dashboard and synced to WP admin \u2014 one source of truth.<\/li>\n<\/ul>\n\n<h4>1.5.11<\/h4>\n\n<ul>\n<li>Telegram forwarder now defaults to ON for <em>both<\/em> \"New order created\" AND \"Order status changed\". Without the status-change hook, completed-order (and paid-order) alerts never reach the dashboard, because WooCommerce fires <code>woocommerce_new_order<\/code> while the order is still in \"pending\" state \u2014 before payment clears. Existing installs keep their saved preference; only fresh setups get the new default.<\/li>\n<\/ul>\n\n<h4>1.5.10<\/h4>\n\n<ul>\n<li>Readme refresh \u2014 Telegram alerts and Customer Notes now front-and-centre in the feature list, \"Problems this plugin solves\" and \"Works great with\" sections. No functional changes.<\/li>\n<\/ul>\n\n<h4>1.5.9<\/h4>\n\n<ul>\n<li>Telegram channel form: hides the <em>Order statuses<\/em> picker unless <em>New order<\/em> is checked. The <em>Order completed<\/em> and <em>Order refunded<\/em> events already imply their status, so asking for status would be confusing (and could silently never fire if you picked a mismatched pair).<\/li>\n<\/ul>\n\n<h4>1.5.8<\/h4>\n\n<ul>\n<li>Updates the bot deep-link to <code>@wc_manager_bot<\/code> (the actual Telegram bot username).<\/li>\n<\/ul>\n\n<h4>1.5.7<\/h4>\n\n<ul>\n<li><strong>Full Telegram channel manager in WP admin<\/strong> \u2014 add, edit, test, delete chats from <em>WC-Manager &rarr; Telegram<\/em> with the same controls the dashboard offers (chat ID, events, statuses, POS \/ online source filter when OpenPOS is detected, min order total, custom HTML template). Reads + writes the dashboard via the existing plugin token \u2014 what you change in either place reflects in both instantly.<\/li>\n<\/ul>\n\n<h4>1.5.6<\/h4>\n\n<ul>\n<li><strong>New: Telegram Alerts<\/strong> module under WC-Manager &rarr; Telegram. Forwards every new WooCommerce order (and optionally every status change) to the WC-Manager dashboard the moment it happens, which then routes it to your chosen Telegram groups, channels or DMs via the WC-Manager bot. Faster than the dashboard's own polling \u2014 alerts hit your phone within a second of checkout. Per-channel filters (events, statuses, POS vs online, min total, custom HTML template) all live in the dashboard.<\/li>\n<\/ul>\n\n<h4>1.5.5<\/h4>\n\n<ul>\n<li><strong>New: Customer Notes &amp; Tags<\/strong> under WC-Manager &rarr; Customer Notes. Free per-customer free-form notes plus tags (VIP, Wholesale, Prefers WhatsApp, At risk, etc.) keyed by email so guest checkouts are annotatable. Includes 9 quick-tag suggestions, 4 000-char notes, and a search box. Two-way sync with the WC-Manager dashboard via new <code>GET \/ PUT \/woo-manager\/v1\/customer-annotations<\/code> endpoints.<\/li>\n<li>New <code>wp_oadb_customer_annotations<\/code> table created automatically on upgrade.<\/li>\n<\/ul>\n\n<h4>1.5.4<\/h4>\n\n<ul>\n<li><strong>New: dark + purple admin theme<\/strong> matching the WC-Manager dashboard. Loaded only on this plugin's WP admin pages \u2014 the rest of WP admin is untouched.<\/li>\n<li><strong>Warehouses auto-mirror from OpenPOS.<\/strong> Every published OpenPOS outlet is now created as a Warehouse on first page load with the OpenPOS link pre-set. No more empty Warehouses page if you already use OpenPOS.<\/li>\n<li><strong>Live stock lookup on the Purchase Order builder.<\/strong> As you type a SKU on a PO line, the plugin fetches the product's name and current stock under the input and auto-fills the unit cost from the WooCommerce price if you haven't set one. Variations supported.<\/li>\n<li><strong>PO status badges<\/strong> restyled as proper pill badges (draft \/ sent \/ partial \/ received \/ cancelled).<\/li>\n<\/ul>\n\n<h4>1.5.3<\/h4>\n\n<ul>\n<li>New REST endpoint <code>POST \/woo-manager\/v1\/purchase-orders\/{id}\/sync-receive<\/code> that bumps per-line <code>qty_received<\/code> without touching WooCommerce stock. Lets the WC-Manager dashboard mirror its own receive and return flows into the plugin's PO status (draft \u2192 sent \u2192 partial \u2192 received) without double-counting stock.<\/li>\n<\/ul>\n\n<h4>1.5.2<\/h4>\n\n<ul>\n<li>New REST endpoints under <code>woo-manager\/v1\/<\/code> for the procurement module \u2014 Suppliers (GET\/POST\/PUT\/DELETE), Warehouses (GET), Purchase Orders (GET\/POST\/DELETE) plus PO send \/ cancel \/ receive actions.<\/li>\n<li>Same authentication as the rest of the bridge \u2014 no additional connection key needed; the WooCommerce REST consumer key handles it.<\/li>\n<li>Lets the WC-Manager dashboard mirror suppliers and POs both ways: changes made in WP admin appear in the dashboard, and vice versa.<\/li>\n<\/ul>\n\n<h4>1.5.1<\/h4>\n\n<ul>\n<li>Renamed the top-level admin menu from \"OpsAssist\" to \"WC-Manager\" to match the dashboard branding.<\/li>\n<li><strong>New REST endpoints<\/strong> for the procurement modules so the WC-Manager dashboard can read and write the same suppliers, warehouses and purchase orders:\n\n<ul>\n<li><code>GET\/POST \/woo-manager\/v1\/suppliers<\/code>, <code>GET\/PUT\/DELETE \/woo-manager\/v1\/suppliers\/{id}<\/code><\/li>\n<li><code>GET\/POST \/woo-manager\/v1\/warehouses<\/code>, <code>GET\/PUT\/DELETE \/woo-manager\/v1\/warehouses\/{id}<\/code><\/li>\n<li><code>GET\/POST \/woo-manager\/v1\/purchase-orders<\/code>, <code>GET\/PUT\/DELETE \/woo-manager\/v1\/purchase-orders\/{id}<\/code><\/li>\n<li><code>POST \/woo-manager\/v1\/purchase-orders\/{id}\/send | \/cancel | \/receive<\/code><\/li>\n<\/ul><\/li>\n<li>All endpoints authenticate with the existing WooCommerce REST consumer key \u2014 no new connection token needed.<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li><strong>New: built-in Procurement modules<\/strong> in the WP admin under a new top-level <strong>OpsAssist<\/strong> menu.<\/li>\n<li><strong>Suppliers<\/strong> \u2014 directory with contact details, payment terms and lead time.<\/li>\n<li><strong>Warehouses<\/strong> \u2014 stock locations, with optional mapping to OpenPOS outlets so receives write to the same <code>_op_qty_warehouse_{id}<\/code> meta OpenPOS already uses.<\/li>\n<li><strong>Purchase Orders<\/strong> \u2014 create draft POs with line items by SKU (variations supported), mark as sent, then receive in one click to bump WooCommerce stock + per-warehouse counts.<\/li>\n<li><strong>Stock Take settings page<\/strong> moved from the WooCommerce submenu into the new OpsAssist menu, keeping all OpsAssist tools in one place.<\/li>\n<li>Database tables are created automatically on upgrade \u2014 no manual setup.<\/li>\n<\/ul>\n\n<h4>1.4.3<\/h4>\n\n<ul>\n<li>Added a custom-header authentication method (X-WC-Manager-Key \/ X-WC-Manager-Secret). Some sites run a Basic-Auth or security plugin that intercepts the standard Authorization header and rejects non-WooCommerce REST routes as a failed login. The custom headers bypass that cleanly, survive redirects, and keep credentials out of the URL\/access logs. The dashboard uses them automatically when available.<\/li>\n<\/ul>\n\n<h4>1.4.2<\/h4>\n\n<ul>\n<li>Fixed authentication on servers where the Authorization header is consumed by PHP (most Apache mod_php and many FastCGI setups). The endpoints now read the WooCommerce consumer key\/secret from PHP_AUTH_USER\/PHP_AUTH_PW and REDIRECT_HTTP_AUTHORIZATION as well, matching how WooCommerce's own REST API authenticates. This resolves the dashboard reporting the plugin as \"not detected\" even when it is active.<\/li>\n<\/ul>\n\n<h4>1.4.1<\/h4>\n\n<ul>\n<li>Hardened the plugin loader: if an upload is incomplete and an internal file is missing, the plugin now shows an admin notice and stops loading instead of triggering a fatal error. This prevents a partial update from taking a site down.<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>The woo-manager\/v1 endpoints now authenticate with your existing WooCommerce REST consumer key\/secret \u2014 no WordPress Application Password needed. Store setup is just the API key plus this plugin.<\/li>\n<li>Added <code>\/ping<\/code> (authenticated handshake + companion-plugin detection), <code>\/media<\/code> (image upload), and <code>\/cashiers<\/code> (user name resolution) endpoints so the dashboard can do everything through this plugin with one credential.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Restructured into a multi-folder plugin.<\/li>\n<li>Added WooCommerce Memberships REST endpoints (<code>\/memberships\/plans<\/code>, <code>\/memberships\/user\/{id}<\/code>).<\/li>\n<li>Merged the standalone \"WC-Manager: Members\" and \"WC-Manager: Stock Take\" companion plugins into this plugin as optional OpenPOS terminal panels. They load only when OpenPOS is present.<\/li>\n<li>Added the Stock Take settings page (WooCommerce \u2192 WC-Manager Stock Take). Existing tokens from the standalone Stock Take plugin are read automatically.<\/li>\n<li>Removed the self-hosted updater from the merged plugins \u2014 updates now come through WordPress.org.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Renamed plugin to \"OpsAssist Data Bridge for WooCommerce\".<\/li>\n<li>Function prefix renamed to <code>oadb_*<\/code>.<\/li>\n<li>No changes to the REST endpoints or response shapes.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added a one-minute cache around the wallet-balances query.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Free WooCommerce purchase orders, suppliers and multi-warehouse stock \u2014 plus optional sync to the WC-Manager dashboard for AI insights.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/314655","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=314655"}],"author":[{"embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/opsassistrsa"}],"wp:attachment":[{"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=314655"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=314655"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=314655"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=314655"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=314655"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=314655"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}