{"id":319849,"date":"2026-06-10T13:23:49","date_gmt":"2026-06-10T13:23:49","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/codeatoz-b2b-suite-for-woocommerce\/"},"modified":"2026-06-30T12:15:27","modified_gmt":"2026-06-30T12:15:27","slug":"codeatoz-b2b-suite-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/ca.wordpress.org\/plugins\/codeatoz-b2b-suite-for-woocommerce\/","author":23453096,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.3.0","stable_tag":"1.3.0","tested":"7.0","requires":"6.4","requires_php":"8.0","requires_plugins":null,"header_name":"CodeAtoZ B2B Suite for WooCommerce","header_author":"CodeAtoZ","header_description":"Wholesale pricing, RFQ \/ quote management, B2B registration approvals, analytics, and automation for WooCommerce. Free core \u2014 upgrade to Pro for CRM, ERP, AI, Net Terms, Price Books, and more.","assets_banners_color":"739dad","last_updated":"2026-06-30 12:15:27","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/codeatoz.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":155,"num_ratings":0,"support_threads":2,"support_threads_resolved":2,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.1":{"tag":"1.1.1","author":"codeatoz","date":"2026-06-10 14:09:53"},"1.2.0":{"tag":"1.2.0","author":"codeatoz","date":"2026-06-29 08:55:56"},"1.3.0":{"tag":"1.3.0","author":"codeatoz","date":"2026-06-30 12:15:27"}},"upgrade_notice":{"1.3.0":"<p>Accepted quotes now auto-create a pending WooCommerce order and email the customer the native Pay-for-Order link. No database changes; safe to update.<\/p>","1.2.0":"<p>Adds full quote line-item editing in the admin \u2014 change prices and quantities, add or remove products, and apply a discount with automatic recalculation. No database changes; safe to update.<\/p>","1.0.0":"<p>Initial release. No upgrade steps required.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3567523,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3567523,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3567523,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3567523,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.1.1","1.2.0","1.3.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3567523,"resolution":"1","location":"assets","locale":"","width":2312,"height":1594},"screenshot-10.png":{"filename":"screenshot-10.png","revision":3567523,"resolution":"10","location":"assets","locale":"","width":2320,"height":1672},"screenshot-11.png":{"filename":"screenshot-11.png","revision":3567523,"resolution":"11","location":"assets","locale":"","width":2358,"height":1544},"screenshot-12.png":{"filename":"screenshot-12.png","revision":3567523,"resolution":"12","location":"assets","locale":"","width":2370,"height":1568},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3567523,"resolution":"2","location":"assets","locale":"","width":2342,"height":3350},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3567523,"resolution":"3","location":"assets","locale":"","width":2576,"height":1550},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3567523,"resolution":"4","location":"assets","locale":"","width":2616,"height":1440},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3567523,"resolution":"5","location":"assets","locale":"","width":2338,"height":2982},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3567523,"resolution":"6","location":"assets","locale":"","width":2246,"height":2426},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3567523,"resolution":"7","location":"assets","locale":"","width":2348,"height":1922},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3567523,"resolution":"8","location":"assets","locale":"","width":2350,"height":2124},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3567523,"resolution":"9","location":"assets","locale":"","width":2400,"height":1388}},"screenshots":{"1":"Dashboard \u2014 at-a-glance stats for quotes, registrations, and module status","2":"Wholesale Pricing \u2014 rule builder with role, product, category, and quantity tier filters","3":"Quotes \/ RFQ \u2014 manage, review, adjust prices, and convert quote requests to orders","4":"Registrations \u2014 B2B customer onboarding with approval workflow and document upload","5":"Settings \u2014 modular settings with tabbed navigation and per-module toggles","6":"RFQ Modal \u2014 customer-facing Request a Quote popup on product pages"}},"plugin_section":[],"plugin_tags":[10553,13756,51032,65073,286],"plugin_category":[45],"plugin_contributors":[256075],"plugin_business_model":[],"class_list":["post-319849","plugin","type-plugin","status-publish","hentry","plugin_tags-b2b","plugin_tags-rfq","plugin_tags-wholesale","plugin_tags-wholesale-pricing","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-codeatoz","plugin_committers-codeatoz","plugin_support_reps-mhhv"],"banners":{"banner":"https:\/\/ps.w.org\/codeatoz-b2b-suite-for-woocommerce\/assets\/banner-772x250.png?rev=3567523","banner_2x":"https:\/\/ps.w.org\/codeatoz-b2b-suite-for-woocommerce\/assets\/banner-1544x500.png?rev=3567523","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/codeatoz-b2b-suite-for-woocommerce\/assets\/icon-128x128.png?rev=3567523","icon_2x":"https:\/\/ps.w.org\/codeatoz-b2b-suite-for-woocommerce\/assets\/icon-256x256.png?rev=3567523","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/codeatoz-b2b-suite-for-woocommerce\/assets\/screenshot-1.png?rev=3567523","caption":"Dashboard \u2014 at-a-glance stats for quotes, registrations, and module status"},{"src":"https:\/\/ps.w.org\/codeatoz-b2b-suite-for-woocommerce\/assets\/screenshot-2.png?rev=3567523","caption":"Wholesale Pricing \u2014 rule builder with role, product, category, and quantity tier filters"},{"src":"https:\/\/ps.w.org\/codeatoz-b2b-suite-for-woocommerce\/assets\/screenshot-3.png?rev=3567523","caption":"Quotes \/ RFQ \u2014 manage, review, adjust prices, and convert quote requests to orders"},{"src":"https:\/\/ps.w.org\/codeatoz-b2b-suite-for-woocommerce\/assets\/screenshot-4.png?rev=3567523","caption":"Registrations \u2014 B2B customer onboarding with approval workflow and document upload"},{"src":"https:\/\/ps.w.org\/codeatoz-b2b-suite-for-woocommerce\/assets\/screenshot-5.png?rev=3567523","caption":"Settings \u2014 modular settings with tabbed navigation and per-module toggles"},{"src":"https:\/\/ps.w.org\/codeatoz-b2b-suite-for-woocommerce\/assets\/screenshot-6.png?rev=3567523","caption":"RFQ Modal \u2014 customer-facing Request a Quote popup on product pages"},{"src":"https:\/\/ps.w.org\/codeatoz-b2b-suite-for-woocommerce\/assets\/screenshot-7.png?rev=3567523","caption":""},{"src":"https:\/\/ps.w.org\/codeatoz-b2b-suite-for-woocommerce\/assets\/screenshot-8.png?rev=3567523","caption":""},{"src":"https:\/\/ps.w.org\/codeatoz-b2b-suite-for-woocommerce\/assets\/screenshot-9.png?rev=3567523","caption":""},{"src":"https:\/\/ps.w.org\/codeatoz-b2b-suite-for-woocommerce\/assets\/screenshot-10.png?rev=3567523","caption":""},{"src":"https:\/\/ps.w.org\/codeatoz-b2b-suite-for-woocommerce\/assets\/screenshot-11.png?rev=3567523","caption":""},{"src":"https:\/\/ps.w.org\/codeatoz-b2b-suite-for-woocommerce\/assets\/screenshot-12.png?rev=3567523","caption":""}],"raw_content":"<!--section=description-->\n<p><strong>CodeAtoZ B2B Suite for WooCommerce<\/strong> turns your WooCommerce store into a full-featured B2B commerce platform. Six powerful free modules cover the essentials, and a <a href=\"https:\/\/codeatoz.com\/codeatoz-b2b-suite-pro\/\">Pro add-on<\/a> unlocks 16 additional advanced modules.<\/p>\n\n<p>Whether you run a wholesale operation, a distributor network, or a trade-only store, this plugin gives you everything needed to serve business customers professionally \u2014 from gated pricing and quote requests to custom registration forms with approval workflows.<\/p>\n\n<h4>Free Modules<\/h4>\n\n<p><strong>Access Control<\/strong>\nHide prices, remove Add-to-Cart buttons, and restrict your catalogue for guest users or specific customer roles. Set a custom replacement action \u2014 show a Login button, Request a Quote modal, or a contact inquiry form instead.<\/p>\n\n<p><strong>Wholesale Pricing<\/strong>\nCreate role-based and user-based pricing rules with percentage discounts, flat discounts, or fixed prices. Full support for quantity tier pricing (volume discounts) with a volume-pricing table shown right on the product page, per-product minimum order quantities (MOQ), and store-wide minimum order requirements (minimum cart total and\/or item count). Includes a Quick Order by SKU form so buyers can add many products to the cart at once.<\/p>\n\n<p><strong>RFQ &amp; Quotes<\/strong>\nAdd a \"Request a Quote\" button to any product. Customers build a quote cart, submit a request, and you review and send a formal quote from the admin panel. Edit line items directly \u2014 change unit prices and quantities, add or remove products, and apply a discount, with the subtotal and total recalculated automatically. When a quote is accepted, it is converted to a WooCommerce order in \"Pending payment\" status and the customer is automatically emailed the native \"Pay for Order\" link \u2014 or trigger it yourself from the dashboard with the \"Accept &amp; Send Payment Link\" button. Optional PDF generation and quote expiry management included.<\/p>\n\n<p><strong>Registrations &amp; Approvals<\/strong>\nReplace standard WooCommerce registration with a B2B-specific form that collects company name, VAT number, phone, and supporting documents. Approve or reject applications from the admin panel. Automatic email notifications go to both customers and admins at every step.<\/p>\n\n<p><strong>Analytics<\/strong>\nTrack key B2B events \u2014 quote requests, approvals, registrations, and pricing rule applications \u2014 and view them in a clean admin dashboard with chart visualisations.<\/p>\n\n<p><strong>Automation<\/strong>\nSchedule email reminders for unanswered quotes, follow-up emails for cold leads, and Slack notifications for new quotes and registrations. Fully configurable intervals and message templates.<\/p>\n\n<h4>Why choose CodeAtoZ B2B Suite?<\/h4>\n\n<ul>\n<li><strong>Modular<\/strong> \u2014 enable only the features your store needs; each module can be toggled independently.<\/li>\n<li><strong>No bloat<\/strong> \u2014 no licensing code, no telemetry, no external pings beyond your own WooCommerce configuration.<\/li>\n<li><strong>WP.org compliant<\/strong> \u2014 100% GPL code, all assets bundled locally, no CDN dependencies.<\/li>\n<li><strong>HPOS ready<\/strong> \u2014 fully compatible with WooCommerce High-Performance Order Storage.<\/li>\n<li><strong>Theme agnostic<\/strong> \u2014 uses standard WooCommerce hooks; frontend templates are overridable from your theme.<\/li>\n<\/ul>\n\n<h4>Pro Add-on Features<\/h4>\n\n<p>Upgrade to <a href=\"https:\/\/codeatoz.com\/codeatoz-b2b-suite-pro\/\">CodeAtoZ B2B Suite Pro<\/a> for:<\/p>\n\n<ul>\n<li><strong>CRM Integration<\/strong> \u2014 HubSpot, Salesforce, Zoho CRM, Pipedrive<\/li>\n<li><strong>Dealer Portal<\/strong> \u2014 Saved carts, branded dashboards, quick re-order<\/li>\n<li><strong>Lead Generation<\/strong> \u2014 Callback forms, inquiry widgets, WhatsApp click-to-chat<\/li>\n<li><strong>AI Assistant<\/strong> \u2014 AI-powered quote suggestions, price scoring, and lead prioritisation (Claude \/ OpenAI)<\/li>\n<li><strong>Sales Reps &amp; Commission<\/strong> \u2014 Assign reps to customers, track commission<\/li>\n<li><strong>ERP Integration<\/strong> \u2014 Push orders to SAP, NetSuite, Xero via webhooks<\/li>\n<li><strong>Bulk \/ Quick Order<\/strong> \u2014 SKU paste \/ CSV upload for fast ordering<\/li>\n<li><strong>Net Terms &amp; Credit Accounts<\/strong> \u2014 Net 30\/60\/90 payment terms, per-customer credit limits<\/li>\n<li><strong>Company Accounts<\/strong> \u2014 Multi-user company accounts with Buyer, Viewer, and Admin roles<\/li>\n<li><strong>Catalog Visibility Rules<\/strong> \u2014 Show\/hide products by role, company, or user<\/li>\n<li><strong>Invoice Manager<\/strong> \u2014 Auto-generate PDF invoices, email them on order status change<\/li>\n<li><strong>Custom Checkout Fields<\/strong> \u2014 PO Number, Department, Delivery Note<\/li>\n<li><strong>Price Books<\/strong> \u2014 Scheduled price lists assignable to users, roles, or companies<\/li>\n<li><strong>Advanced Reporting &amp; Export<\/strong> \u2014 B2B revenue, quote conversion, rep performance<\/li>\n<li><strong>In-App Notifications<\/strong> \u2014 Real-time bell notifications for quotes, approvals, credit events<\/li>\n<li><strong>Account Statement<\/strong> \u2014 Monthly purchase and credit statement downloadable from My Account<\/li>\n<\/ul>\n\n<h4>Compatibility<\/h4>\n\n<ul>\n<li><strong>WooCommerce HPOS<\/strong> \u2014 Fully compatible with High-Performance Order Storage (custom order tables)<\/li>\n<li><strong>Block Themes<\/strong> \u2014 Works with both classic and block-based themes<\/li>\n<li><strong>Multisite<\/strong> \u2014 Plugin can be network-activated<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>codeatoz-b2b-suite-for-woocommerce<\/code> directory to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> screen in WordPress<\/li>\n<li>Go to <strong>B2B Suite \u2192 Dashboard<\/strong> to get started<\/li>\n<li>Enable and configure modules under <strong>B2B Suite \u2192 Settings \u2192 Modules<\/strong><\/li>\n<\/ol>\n\n<h4>Recommended first steps<\/h4>\n\n<ol>\n<li>Enable the modules you need under <strong>Settings \u2192 Modules<\/strong><\/li>\n<li>Set your B2B customer roles under <strong>Settings \u2192 Access Control<\/strong><\/li>\n<li>Add pricing rules under <strong>Wholesale Pricing \u2192 Rules<\/strong><\/li>\n<li>Configure the registration form under <strong>Settings \u2192 Registrations<\/strong><\/li>\n<li>Set up quote PDF settings under <strong>Settings \u2192 RFQ<\/strong><\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20require%20woocommerce%3F\"><h3>Does this plugin require WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. WooCommerce 8.0 or later must be installed and active.<\/p><\/dd>\n<dt id=\"what%20php%20version%20is%20required%3F\"><h3>What PHP version is required?<\/h3><\/dt>\n<dd><p>PHP 8.0 or later.<\/p><\/dd>\n<dt id=\"can%20i%20use%20only%20some%20modules%3F\"><h3>Can I use only some modules?<\/h3><\/dt>\n<dd><p>Yes. Each module can be enabled or disabled individually from <strong>B2B Suite \u2192 Settings \u2192 Modules<\/strong>. Disabled modules load no code and have no performance impact.<\/p><\/dd>\n<dt id=\"will%20it%20work%20with%20my%20theme%3F\"><h3>Will it work with my theme?<\/h3><\/dt>\n<dd><p>The plugin relies on standard WooCommerce hooks and is compatible with any properly-coded WooCommerce theme. Frontend templates can be overridden by copying them to your theme's <code>codeatoz-b2b-suite-for-woocommerce\/<\/code> subdirectory.<\/p><\/dd>\n<dt id=\"how%20do%20i%20override%20templates%3F\"><h3>How do I override templates?<\/h3><\/dt>\n<dd><p>Copy the template file from <code>\/wp-content\/plugins\/codeatoz-b2b-suite-for-woocommerce\/templates\/<\/code> to <code>\/wp-content\/themes\/your-theme\/codeatoz-b2b-suite-for-woocommerce\/<\/code> preserving the same folder structure, then edit the copy.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20create%20database%20tables%3F\"><h3>Does the plugin create database tables?<\/h3><\/dt>\n<dd><p>Yes. On activation it creates custom tables (prefixed <code>{prefix}b2b_<\/code>) for quotes, quote items, quote notes, registrations, pricing rules, analytics events, and automation logs, using <code>dbDelta()<\/code>. All plugin tables, options, roles, and meta are removed when you delete the plugin (via uninstall.php).<\/p><\/dd>\n<dt id=\"how%20do%20i%20set%20up%20the%20rfq%20%2F%20request%20a%20quote%20feature%3F\"><h3>How do I set up the RFQ \/ Request a Quote feature?<\/h3><\/dt>\n<dd><ol>\n<li>Enable the RFQ module under Settings \u2192 Modules<\/li>\n<li>Enable the Access Control module and set the \"replacement action\" to \"Request a Quote\" for guest or non-B2B roles<\/li>\n<li>Customers will see a \"Request a Quote\" button and a modal form on product pages<\/li>\n<li>Submitted quotes appear under <strong>B2B Suite \u2192 Quotes<\/strong> in your admin<\/li>\n<\/ol><\/dd>\n<dt id=\"can%20customers%20see%20their%20quotes%3F\"><h3>Can customers see their quotes?<\/h3><\/dt>\n<dd><p>Yes. Customers can view all their quote requests under <strong>My Account \u2192 Quotes<\/strong>. They can also download a PDF and accept quotes from there.<\/p><\/dd>\n<dt id=\"where%20can%20i%20get%20support%3F\"><h3>Where can I get support?<\/h3><\/dt>\n<dd><p>Read the <a href=\"https:\/\/codeatoz.com\/docs\/b2b-suite\/\">documentation<\/a>, post in the <a href=\"https:\/\/wordpress.org\/support\/plugin\/codeatoz-b2b-suite-for-woocommerce\/\">WordPress.org support forum<\/a>, or visit <a href=\"https:\/\/codeatoz.com\/\">codeatoz.com<\/a>.<\/p><\/dd>\n<dt id=\"is%20there%20a%20pro%20version%3F\"><h3>Is there a Pro version?<\/h3><\/dt>\n<dd><p>Yes \u2014 <a href=\"https:\/\/codeatoz.com\/codeatoz-b2b-suite-pro\/\">CodeAtoZ B2B Suite Pro<\/a> adds 16 additional modules including CRM, ERP, AI, Net Terms, Price Books, Invoices, and more.<\/p><\/dd>\n<dt id=\"does%20the%20free%20plugin%20do%20license%20key%20checks%20or%20phone%20home%3F\"><h3>Does the free plugin do license key checks or phone home?<\/h3><\/dt>\n<dd><p>No. The free plugin contains no licensing code, telemetry, or external calls beyond the WooCommerce connection you configure yourself. All JavaScript assets (including Chart.js) are bundled locally.<\/p><\/dd>\n<dt id=\"is%20this%20plugin%20compatible%20with%20woocommerce%20hpos%3F\"><h3>Is this plugin compatible with WooCommerce HPOS?<\/h3><\/dt>\n<dd><p>Yes. The plugin explicitly declares HPOS compatibility and uses WooCommerce's order APIs rather than direct post queries.<\/p><\/dd>\n<dt id=\"can%20this%20be%20used%20on%20a%20multisite%20network%3F\"><h3>Can this be used on a multisite network?<\/h3><\/dt>\n<dd><p>Yes. The plugin can be network-activated. Each site in the network maintains its own B2B settings, quotes, and registrations.<\/p><\/dd>\n<dt id=\"how%20do%20i%20add%20the%20quick%20order%20%28order%20by%20sku%29%20form%3F\"><h3>How do I add the Quick Order (order by SKU) form?<\/h3><\/dt>\n<dd><p>Create or edit a page and add the shortcode <code>[catoz_b2b_quick_order]<\/code>. Customers can type product SKUs and quantities and add them all to the cart in one click. You can change the number of starting rows with <code>[catoz_b2b_quick_order rows=\"10\"]<\/code>.<\/p><\/dd>\n<dt id=\"how%20do%20i%20require%20a%20minimum%20order%20before%20checkout%3F\"><h3>How do I require a minimum order before checkout?<\/h3><\/dt>\n<dd><p>Go to <strong>B2B Suite \u2192 Settings \u2192 Wholesale Pricing \u2192 Minimum Order Requirements<\/strong> and set a minimum order amount (cart subtotal) and\/or a minimum total item count. Customers who do not meet the requirement see a notice on the cart and checkout and cannot place the order. Set either value to 0 to disable it.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>New: Accepted quotes now convert to a WooCommerce order in \"Pending payment\" status and the customer is automatically emailed WooCommerce's native \"Pay for Order\" link, so they can complete payment through your normal checkout \u2014 end-to-end quote-to-payment with no manual steps.<\/li>\n<li>New: \"Accept &amp; Send Payment Link\" button on the admin quote screen to create the pending order and send the payment email on demand from the dashboard.<\/li>\n<li>New: \"Send Payment Link on Acceptance\" setting (Settings \u2192 RFQ &amp; Quotes, on by default) to toggle the automatic payment email.<\/li>\n<li>Quote-to-order conversion is now guarded against duplicates, so a quote can never generate two orders.<\/li>\n<li>New: Quick Order by SKU \u2014 add the [catoz_b2b_quick_order] shortcode to any page so buyers can enter multiple SKUs and quantities and add them all to the cart in one click.<\/li>\n<li>New: Minimum order requirements \u2014 set a store-wide minimum cart subtotal and\/or minimum item count (Settings \u2192 Wholesale Pricing) that must be met before checkout.<\/li>\n<li>New: The product-page volume-pricing table now shows a \"You Save\" column with the discount percentage for each quantity tier.<\/li>\n<li>Developer: new catoz_b2b_quote_converted and catoz_b2b_order_payment_link_sent action hooks.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>New: Full line-item editing for quotes in the admin. Open any quote and change the unit price and quantity of each line \u2014 line totals, subtotal, and grand total update live as you type.<\/li>\n<li>New: Add products to an existing quote using WooCommerce product search, and remove line items you no longer need.<\/li>\n<li>New: Editable quote discount. Enter a discount amount and the grand total recalculates automatically (the discount can never exceed the subtotal).<\/li>\n<li>All quote totals are recalculated and saved on the server, so the stored figures always match the line items.<\/li>\n<li>Converted quotes are locked from editing to protect the WooCommerce order that was generated from them.<\/li>\n<li>Developer: new Catoz_B2B_DB helpers \u2014 update_quote_item(), delete_quote_item(), get_quote_item(), recalculate_quote_totals() \u2014 and a new catoz_b2b_quote_items_updated action hook fired after a quote's items are saved.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Quote PDF now enqueues its stylesheet via wp_enqueue_style() and prints it with wp_print_styles() by handle \u2014 removes the inline  block entirely<\/li>\n<li>Move all remaining inline style=\"\" attributes in the PDF template to CSS classes in quote-pdf.css<\/li>\n<li>Replace the print button's inline onclick handler with an enqueued script (quote-pdf.js) printed via wp_print_scripts() \u2014 the PDF template now contains zero inline CSS or JS<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Move quote PDF inline styles to assets\/css\/quote-pdf.css; load via file_get_contents() with explanatory comment (standalone PDF document cannot use wp_enqueue_style)<\/li>\n<li>Rename wp_localize_script object names to match plugin prefix convention: catozB2BFront \u2192 catoz_b2b_front, catozB2BAnalytics \u2192 catoz_b2b_analytics<\/li>\n<li>Update all JavaScript references in frontend.js, admin.js, and admin-analytics.js to use renamed object names<\/li>\n<\/ul>\n\n<h4>1.0.9<\/h4>\n\n<ul>\n<li>Suppress false-positive InputNotSanitized warnings on session reads (values are sanitized per-field after read)<\/li>\n<li>Prefix global variables in uninstall.php multisite loop<\/li>\n<\/ul>\n\n<h4>1.0.8<\/h4>\n\n<ul>\n<li>Remove duplicate Plugin URI header (was identical to Author URI)<\/li>\n<\/ul>\n\n<h4>1.0.7<\/h4>\n\n<ul>\n<li>Update bundled Chart.js library to v4.5.1 (latest stable)<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>Add wp_unslash() before sanitize_key() on all $_GET\/$_POST reads<\/li>\n<li>Escape all dynamic class-attribute output with esc_attr()<\/li>\n<li>Prefix product meta keys (_catoz_b2b_moq, _catoz_b2b_wholesale_price)<\/li>\n<li>Add uninstall.php to remove all tables, options, roles, and meta on deletion (multisite aware)<\/li>\n<li>Correct the database\/uninstall description in the FAQ<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Fix fatal PHP syntax errors in dashboard, quote-cart, and registration-form templates (missing closing PHP tag)<\/li>\n<li>Move inline analytics chart script to an enqueued JS file with wp_localize_script<\/li>\n<li>Add \"Requires Plugins: woocommerce\" header for dependency management<\/li>\n<li>Escape shortcode output (registration status message) before return<\/li>\n<li>Sanitize quote-cart session data on read; sanitize JSON-body nonce before verification<\/li>\n<li>Prefix all AJAX actions, shortcodes, session keys, and the JS data object with catoz_b2b_ to avoid collisions<\/li>\n<li>Fix mismatched AJAX action names for Slack test, run-now, and AI settings save buttons<\/li>\n<li>Update Plugin URI to a valid URL<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Change text domain to codeatoz-b2b-suite-for-woocommerce to match plugin title slug (eliminates all automated checker textdomain warnings)<\/li>\n<li>Rename languages pot file to codeatoz-b2b-suite-for-woocommerce.pot<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Fix missing wp_unslash\/sanitize on sticky form POST fields in WooCommerce registration integration<\/li>\n<li>Fix phpcs:disable scope covering all $_GET accesses in PDF download handler<\/li>\n<li>Fix translators comment placement in WhatsApp CTA and Variation label<\/li>\n<li>Add PluginCheck.Security.DirectDB.UnescapedDBParameter suppression for safe dynamic SQL queries<\/li>\n<li>Extend NonPrefixedClassFound suppression to HTML class attributes in view templates<\/li>\n<li>Fix session variable access coverage in quote cart indicator<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Fix unescaped apostrophe in quote follow-up email template causing plugin checker parse error<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Fix all WP.org plugin checker errors: output escaping, translators comments, wp_unslash, nonce handling, and function name prefixing<\/li>\n<li>Replace non-enqueued stylesheet in PDF template with inline styles<\/li>\n<li>Add missing direct file access protection to PDF template<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Access Control module \u2014 hide prices, restrict catalogue, configurable replacement CTAs<\/li>\n<li>Wholesale Pricing module \u2014 role\/user-based rules, tier pricing, MOQ per product<\/li>\n<li>RFQ &amp; Quotes module \u2014 quote cart, admin quote management, PDF generation, order conversion<\/li>\n<li>Registrations &amp; Approvals module \u2014 B2B registration form with approval workflow<\/li>\n<li>Analytics module \u2014 event tracking and admin dashboard charts<\/li>\n<li>Automation module \u2014 scheduled email reminders and Slack notifications<\/li>\n<li>HPOS compatibility declared<\/li>\n<li>WooCommerce 8.x\u20139.x compatible<\/li>\n<li>WordPress 6.4\u20136.8 compatible<\/li>\n<\/ul>","raw_excerpt":"B2B commerce tools for WooCommerce \u2014 wholesale pricing, RFQ, registration approvals, analytics, and email automation.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/319849","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=319849"}],"author":[{"embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/codeatoz"}],"wp:attachment":[{"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=319849"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=319849"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=319849"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=319849"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=319849"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=319849"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}