{"id":352933,"date":"2026-08-27T13:48:47","date_gmt":"2026-08-27T13:48:47","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/quote-catalog-for-woocommerce\/"},"modified":"2026-08-28T09:12:11","modified_gmt":"2026-08-28T09:12:11","slug":"earnestlabs-quote-catalog-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/earnestlabs-quote-catalog-for-woocommerce\/","author":23547300,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.17.7","stable_tag":"1.17.7","tested":"7.1","requires":"6.5","requires_php":"7.4","requires_plugins":null,"header_name":"EarnestLabs Quote & Catalog for WooCommerce","header_author":"EarnestLabs","header_description":"Lightweight catalog mode and quote requests for WooCommerce. Hide prices, replace the cart with a \"Request a quote\" flow, and manage every request from a clean quotes dashboard.","assets_banners_color":"f6f8fc","last_updated":"2026-08-28 09:12:11","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/earnestlabs.io\/quote-and-catalog","header_author_uri":"https:\/\/earnestlabs.io","rating":0,"author_block_rating":0,"active_installs":0,"downloads":58,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.17.7":{"tag":"1.17.7","author":"earnestlabs","date":"2026-08-28 09:12:11","revision":3670069}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3668946,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3668946,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3668946,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3668946,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.17.7"],"block_files":[],"assets_screenshots":{"screenshot-1.gif":{"filename":"screenshot-1.gif","revision":3668946,"resolution":"1","location":"assets","locale":"","width":620,"height":443},"screenshot-10.png":{"filename":"screenshot-10.png","revision":3668946,"resolution":"10","location":"assets","locale":"","width":2880,"height":2200},"screenshot-11.png":{"filename":"screenshot-11.png","revision":3668946,"resolution":"11","location":"assets","locale":"","width":2880,"height":1598},"screenshot-12.png":{"filename":"screenshot-12.png","revision":3668946,"resolution":"12","location":"assets","locale":"","width":2880,"height":1062},"screenshot-13.png":{"filename":"screenshot-13.png","revision":3668946,"resolution":"13","location":"assets","locale":"","width":2880,"height":2480},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3668946,"resolution":"2","location":"assets","locale":"","width":1600,"height":1950},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3668946,"resolution":"3","location":"assets","locale":"","width":1600,"height":1188},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3668946,"resolution":"4","location":"assets","locale":"","width":2560,"height":3400},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3668946,"resolution":"5","location":"assets","locale":"","width":2880,"height":2210},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3668946,"resolution":"6","location":"assets","locale":"","width":2880,"height":2480},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3668946,"resolution":"7","location":"assets","locale":"","width":2350,"height":1950},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3668946,"resolution":"8","location":"assets","locale":"","width":2880,"height":1900},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3668946,"resolution":"9","location":"assets","locale":"","width":2880,"height":2360}},"screenshots":{"1":"The whole run, in one loop: a shop with its prices hidden, two products gathered into one request, the form sent, and the request landing in your dashboard with its own number.","2":"Catalog mode on the shop: prices hidden, a \"Request a quote\" button on every product.","3":"A product page in catalog mode: no price, no cart, one clear call to action.","4":"The quote page a customer sees: several products in one request, editable quantities, and the built-in form.","5":"The quotes dashboard: search by customer, email, VAT number or product, filter by status and period, and sort on any column.","6":"A priced quote (Pro): the linked order, the payment link and the reply link your customer receives.","7":"The PDF quote (Pro), with the shop\u2019s logo, brand colour and signature.","8":"Catalog mode settings: the two switches that change the whole store.","9":"The form field builder: text, choices, dates, numbers and headings, laid out in the order you want.","10":"Targeting (Pro): selected categories or products, exempted roles.","11":"Tools: 21 bundled languages and a one-click test email.","12":"Outgoing webhooks: choose the events, send a test event.","13":"The Help screen: how it works in four steps, and the questions shop owners actually ask."}},"plugin_section":[],"plugin_tags":[65997,190088,5055,13770,13771],"plugin_category":[45],"plugin_contributors":[277888],"plugin_business_model":[],"class_list":["post-352933","plugin","type-plugin","status-publish","hentry","plugin_tags-catalog-mode","plugin_tags-hide-prices","plugin_tags-quote","plugin_tags-request-a-quote","plugin_tags-request-a-quote-button","plugin_category-ecommerce","plugin_contributors-earnestlabs","plugin_committers-earnestlabs"],"banners":{"banner":"https:\/\/ps.w.org\/earnestlabs-quote-catalog-for-woocommerce\/assets\/banner-772x250.png?rev=3668946","banner_2x":"https:\/\/ps.w.org\/earnestlabs-quote-catalog-for-woocommerce\/assets\/banner-1544x500.png?rev=3668946","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/earnestlabs-quote-catalog-for-woocommerce\/assets\/icon-128x128.png?rev=3668946","icon_2x":"https:\/\/ps.w.org\/earnestlabs-quote-catalog-for-woocommerce\/assets\/icon-256x256.png?rev=3668946","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/earnestlabs-quote-catalog-for-woocommerce\/assets\/screenshot-1.gif?rev=3668946","caption":"The whole run, in one loop: a shop with its prices hidden, two products gathered into one request, the form sent, and the request landing in your dashboard with its own number."},{"src":"https:\/\/ps.w.org\/earnestlabs-quote-catalog-for-woocommerce\/assets\/screenshot-2.png?rev=3668946","caption":"Catalog mode on the shop: prices hidden, a \"Request a quote\" button on every product."},{"src":"https:\/\/ps.w.org\/earnestlabs-quote-catalog-for-woocommerce\/assets\/screenshot-3.png?rev=3668946","caption":"A product page in catalog mode: no price, no cart, one clear call to action."},{"src":"https:\/\/ps.w.org\/earnestlabs-quote-catalog-for-woocommerce\/assets\/screenshot-4.png?rev=3668946","caption":"The quote page a customer sees: several products in one request, editable quantities, and the built-in form."},{"src":"https:\/\/ps.w.org\/earnestlabs-quote-catalog-for-woocommerce\/assets\/screenshot-5.png?rev=3668946","caption":"The quotes dashboard: search by customer, email, VAT number or product, filter by status and period, and sort on any column."},{"src":"https:\/\/ps.w.org\/earnestlabs-quote-catalog-for-woocommerce\/assets\/screenshot-6.png?rev=3668946","caption":"A priced quote (Pro): the linked order, the payment link and the reply link your customer receives."},{"src":"https:\/\/ps.w.org\/earnestlabs-quote-catalog-for-woocommerce\/assets\/screenshot-7.png?rev=3668946","caption":"The PDF quote (Pro), with the shop\u2019s logo, brand colour and signature."},{"src":"https:\/\/ps.w.org\/earnestlabs-quote-catalog-for-woocommerce\/assets\/screenshot-8.png?rev=3668946","caption":"Catalog mode settings: the two switches that change the whole store."},{"src":"https:\/\/ps.w.org\/earnestlabs-quote-catalog-for-woocommerce\/assets\/screenshot-9.png?rev=3668946","caption":"The form field builder: text, choices, dates, numbers and headings, laid out in the order you want."},{"src":"https:\/\/ps.w.org\/earnestlabs-quote-catalog-for-woocommerce\/assets\/screenshot-10.png?rev=3668946","caption":"Targeting (Pro): selected categories or products, exempted roles."},{"src":"https:\/\/ps.w.org\/earnestlabs-quote-catalog-for-woocommerce\/assets\/screenshot-11.png?rev=3668946","caption":"Tools: 21 bundled languages and a one-click test email."},{"src":"https:\/\/ps.w.org\/earnestlabs-quote-catalog-for-woocommerce\/assets\/screenshot-12.png?rev=3668946","caption":"Outgoing webhooks: choose the events, send a test event."},{"src":"https:\/\/ps.w.org\/earnestlabs-quote-catalog-for-woocommerce\/assets\/screenshot-13.png?rev=3668946","caption":"The Help screen: how it works in four steps, and the questions shop owners actually ask."}],"raw_content":"<!--section=description-->\n<p>You sell things that do not have one fixed price. Someone wants one. You want to sell it to them. What stands between you is five emails.<\/p>\n\n<p>Right now that request arrives through your contact form, the same form people use to ask about your opening hours. It says \"how much for this?\" and nothing else. So you write back to ask which model, what quantity, for when. She answers two of the three. You write again. By the time you know enough to put a price on it, four days have gone, and you retype the whole thing into a Word file.<\/p>\n\n<p>Quote &amp; Catalog puts the questions in front of the request instead of after it.<\/p>\n\n<p><strong>Ask.<\/strong> Your customer gathers several products into one request and answers, up front, the questions your trade actually needs: dimensions, quantity, a deadline, a VAT number.<\/p>\n\n<p><strong>Price.<\/strong> Every request lands on one screen with its own status. You read it once and you answer once.<\/p>\n\n<p><strong>Follow.<\/strong> New, Quoted, Accepted, Paid, Declined, Expired. What is waiting on you is visible, and what has gone quiet stops being something you have to remember.<\/p>\n\n<p>About forty minutes per quote. At ten quotes a month, that is close to a full working day back, every month.<\/p>\n\n<p>Catalog mode is free. The quote flow is free. The dashboard is free. The Pro extension carries it to the end: your reply holds a price and a payment link, and the request becomes a real WooCommerce order your customer pays online, with the gateways you already have.<\/p>\n\n<p>Made for B2B, wholesale, made-to-order products, and any store where one fixed price does not make sense.<\/p>\n\n<p>Built to be reliable and lightweight:<\/p>\n\n<ul>\n<li>Purchasing is blocked <strong>server-side<\/strong>, not just hidden with CSS. Even a theme that renders its own cart button cannot bypass it.<\/li>\n<li>Works with <strong>classic and block themes<\/strong> out of the box.<\/li>\n<li>Product <strong>structured data is cleaned<\/strong> so search engines stop showing hidden prices.<\/li>\n<li>No intrusive popups, no bloat, no external dependencies.<\/li>\n<\/ul>\n\n<h4>Free features<\/h4>\n\n<ul>\n<li>Catalog mode: hide all prices and\/or disable purchasing store-wide.<\/li>\n<li>\"Request a quote\" button replacing the cart button (customizable text).<\/li>\n<li>Multi-product quote list: customers group several products in one request.<\/li>\n<li><strong>Variable products<\/strong>: the quote button sits on the variations form, and the variant your customer picked is carried onto the quote screen, the dashboard, the emails and the printable sheet. She asks for the navy in size 42, you read the navy in size 42.<\/li>\n<li>Built-in quote form, and <strong>no Contact Form 7 or WPForms to install<\/strong>. Choose whether you ask for a phone number, a message and a VAT number, or none of them.<\/li>\n<li><strong>VAT number for business customers<\/strong>: ask for it, and it follows the request onto the quote screen, the emails and the printable sheet. Collected and shown, never used to change your tax calculation. With Pro it rides the PDF, the WooCommerce order and the CSV export too.<\/li>\n<li><strong>Form field builder<\/strong>: text, number, dropdown, radio, checkboxes, date, headings. Ask the one question your trade needs.<\/li>\n<li><strong>Quotes dashboard<\/strong>: every request stored in your admin with its own status (New \u2192 Quoted \u2192 Accepted \u2192 Paid, or Declined \/ Expired), not just an email that gets lost. Search by customer, email, product name or <strong>SKU<\/strong>, filter by period, and sort any column. The search ignores accents, so Echarpe finds \u00c9charpe.<\/li>\n<li><strong>A Help screen that answers<\/strong>: how the plugin works in four steps, and the questions shop owners actually ask, answered in full, not a page of links.<\/li>\n<li>Email notifications to the shop owner and confirmation to the customer.<\/li>\n<li><strong>A yearly recap of what the plugin brought you<\/strong>: once a year, one email with the requests you received, how many turned into a yes, and what those are worth. No sales pitch, and nothing at all on a year without requests.<\/li>\n<li><strong>Anti-spam<\/strong>: a silent honeypot, and Cloudflare Turnstile if you want a second gate.<\/li>\n<li><strong>Printable quote sheet<\/strong>: a clean copy of any request, from the browser, no PDF needed.<\/li>\n<li><strong>Outgoing webhooks<\/strong> to Zapier, Make, n8n, Slack or your CRM.<\/li>\n<li><strong>21 languages out of the box<\/strong>: English plus 20 bundled translations, no translation plugin required.<\/li>\n<li>Setup wizard, HPOS compatible, theme-overridable templates.<\/li>\n<\/ul>\n\n<h4>Pro features<\/h4>\n\n<ul>\n<li><strong>Price the quote and let the customer pay online<\/strong>: your reply becomes a real WooCommerce order, paid with the gateways your shop already has.<\/li>\n<li><strong>PDF quote<\/strong> attached to the email, with your logo, signature, brand colour and your own font.<\/li>\n<li><strong>A reply page your customer reaches from the email<\/strong>: accept, decline with a reason, or <strong>counter-offer<\/strong> their own price, without creating an account.<\/li>\n<li><strong>Ask for a deposit<\/strong>: the customer pays a share to confirm, you invoice the balance from the quote screen once it lands.<\/li>\n<li><strong>One reminder<\/strong> to a customer sitting on an unpaid quote, with the payment link. One only, on the day you choose.<\/li>\n<li>Automatic expiry: after the number of days you choose, the quote lapses and its payment link stops working.<\/li>\n<li>\"My quotes\" in the customer account, where they accept or decline.<\/li>\n<li>File upload fields, with the formats you allow and a double check on what is really inside.<\/li>\n<li>Per-product, per-category and per-role targeting.<\/li>\n<li>Your own wording for the priced-quote email.<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>The plugin makes no external request out of the box. Two optional features connect to a third party, each only when you enable it:<\/p>\n\n<p><strong>Cloudflare Turnstile<\/strong> (anti-spam, off by default). When you enable it and paste your own Cloudflare keys, the quote form loads Cloudflare's widget script from challenges.cloudflare.com in the visitor's browser, and each form submission is verified by a server-side call to Cloudflare's siteverify endpoint. What is sent: the widget token and the visitor's IP address, as required by the verification protocol. See Cloudflare's <a href=\"https:\/\/www.cloudflare.com\/terms\/\">terms of service<\/a> and <a href=\"https:\/\/www.cloudflare.com\/privacypolicy\/\">privacy policy<\/a>.<\/p>\n\n<p><strong>Outgoing webhooks<\/strong> (off by default). When you enter a webhook address, quote events send a JSON payload to it: the event and its date, your site address, the quote (number, status, dates, admin link), the products and quantities requested, the answers to your custom fields, and <strong>the customer's name, email, phone and message<\/strong>, because a CRM or a Zapier scenario cannot do anything useful without them. Turn this on only for an endpoint you trust, and tell your customers about it in your privacy policy. The \"Send a test event\" button is different: it posts a sample payload with no customer data, so you can check the address answers before any real request flows. The receiving service is one you choose and operate; its own terms apply.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>earnestlabs-quote-catalog-for-woocommerce<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin through the \"Plugins\" menu. A \"Request a quote\" page is created automatically.<\/li>\n<li>Fine-tune everything under Quote &amp; Catalog \u2192 Settings.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"i%20do%20not%20have%20time%20to%20set%20this%20up.\"><h3>I do not have time to set this up.<\/h3><\/dt>\n<dd><p>Activating the plugin opens a four-step wizard: what the plugin should do, what the button says, where the requests land, and your own details. Catalog mode itself is two switches.<\/p>\n\n<p>You do not configure stock, you do not install a form plugin, and you do not touch your theme. If you stop right after the wizard, you already have a working quote flow.<\/p><\/dd>\n<dt id=\"i%20do%20not%20have%20the%20budget.\"><h3>I do not have the budget.<\/h3><\/dt>\n<dd><p>The free version is a whole run, not a trial. Catalog mode, the multi-product quote list, the built-in form with your own fields, the dashboard with its statuses and its search, the printable quote sheet, outgoing webhooks and 21 languages are all in it. Nothing expires, and nothing switches itself off later.<\/p>\n\n<p>The Pro extension only starts to matter once your quotes turn into money: putting a price on a quote, letting the customer pay it online, the PDF. If you are not there yet, the free version is the right size for you.<\/p><\/dd>\n<dt id=\"it%20is%20not%20my%20decision.\"><h3>It is not my decision.<\/h3><\/dt>\n<dd><p>Whoever has to agree usually asks the same three things.<\/p>\n\n<p>Nothing is migrated: your products, your prices and your past orders stay exactly as they are. It is reversible: deactivate the plugin and the shop sells again the same minute, with every request still stored in your admin. And nothing leaves your site: no account to create, no analytics, no call home. The only outgoing connections are the ones you switch on yourself, and each is listed in the External services section below.<\/p><\/dd>\n<dt id=\"this%20is%20not%20for%20my%20kind%20of%20shop.\"><h3>This is not for my kind of shop.<\/h3><\/dt>\n<dd><p>It is built for shops where one fixed price does not make sense: made to measure, wholesale tiers, professional equipment, freight that depends on the address, anything priced per project.<\/p>\n\n<p>It is not for you if every product has one price and your customers buy without asking. Hiding those prices would cost you sales, and this plugin would be in the way. That is worth knowing before you install it rather than after.<\/p><\/dd>\n<dt id=\"i%20already%20tried%20a%20quote%20plugin%20and%20it%20did%20not%20work.\"><h3>I already tried a quote plugin and it did not work.<\/h3><\/dt>\n<dd><p>Three things usually go wrong, and each one is answered here.<\/p>\n\n<p>Prices hidden with CSS only, so a theme, a widget or a search result still shows them. Here purchasing is blocked inside WooCommerce, server-side, and the product structured data is cleaned so search engines stop displaying a price you have hidden.<\/p>\n\n<p>The request arriving as a plain email that gets lost under everything else. Here every request is stored, numbered and given a status, and the dashboard shows you what is still waiting on you.<\/p>\n\n<p>Needing a second plugin for the form. The form is built in, and you add the fields your trade needs without leaving the settings.<\/p><\/dd>\n<dt id=\"i%20am%20not%20ready.\"><h3>I am not ready.<\/h3><\/dt>\n<dd><p>Then do not switch your whole shop over. Turn on the quote button and leave catalog mode off: your prices and cart buttons stay exactly as they are, and a \"Request a quote\" button appears next to them. Customers who are ready can still buy, and the ones who want a price can ask for one.<\/p>\n\n<p>You can also drop the [elqc_quote_button] shortcode on a single product and see what a real request looks like before deciding anything.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20my%20theme%3F\"><h3>Does it work with my theme?<\/h3><\/dt>\n<dd><p>The plugin only uses official WooCommerce hooks and blocks purchasing server-side, so it works with the vast majority of classic and block themes.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20elementor%2C%20divi%20and%20other%20page%20builders%3F\"><h3>Does it work with Elementor, Divi and other page builders?<\/h3><\/dt>\n<dd><p>Yes. Purchasing is blocked inside WooCommerce itself, so no builder can bypass it, and prices go through the official WooCommerce filter that every builder widget calls. The quote button hooks the per-type add-to-cart actions, which page builder widgets trigger too. If a custom template still needs it, drop the [elqc_quote_button] shortcode anywhere, including in an Elementor or Divi text widget.<\/p><\/dd>\n<dt id=\"how%20does%20the%20customer%20actually%20pay%3F%20%28pro%29\"><h3>How does the customer actually pay? (Pro)<\/h3><\/dt>\n<dd><p>With the gateways your shop already has. Pricing a quote creates a normal WooCommerce order and sends its payment link, so Stripe, PayPal, bank transfer, cheque or cash on delivery all work exactly as they do for any other order, and there is no separate checkout to configure. Paying marks the quote as Paid, and cancelling or refunding the order pulls the quote back in step.<\/p><\/dd>\n<dt id=\"my%20customers%20are%20businesses.%20can%20i%20collect%20their%20vat%20number%3F\"><h3>My customers are businesses. Can I collect their VAT number?<\/h3><\/dt>\n<dd><p>Yes. Settings \u2192 The form \u2192 VAT number field, set to optional or required. The number then follows the request everywhere it matters: the quote screen, the emails, the printable sheet, the PDF and the WooCommerce order, saved under <code>_billing_vat_number<\/code>, the key invoicing plugins look for.<\/p>\n\n<p>It is collected and displayed, nothing more. It does not exempt anyone from tax and it changes no total: deciding who pays what is your accountant's call and your country's, not a plugin's. The field is hidden by default, so a shop that sells to individuals never sees it.<\/p><\/dd>\n<dt id=\"are%20quote%20requests%20stored%20anywhere%3F\"><h3>Are quote requests stored anywhere?<\/h3><\/dt>\n<dd><p>Yes. Every request appears under Quote &amp; Catalog \u2192 Quotes with its own status, in addition to the email notifications.<\/p><\/dd>\n<dt id=\"can%20i%20customise%20the%20templates%3F\"><h3>Can I customise the templates?<\/h3><\/dt>\n<dd><p>Yes. The plugin ships proper, theme-overridable templates: copy a file from the plugin's <code>templates\/<\/code> folder into <code>yourtheme\/earnestlabs-quote-catalog-for-woocommerce\/<\/code> and it takes precedence, the standard WooCommerce approach. The front end is styled through a real stylesheet with CSS variables (no forced inline styles), and filters such as <code>elqc_quote_items_html<\/code>, <code>elqc_quote_contact_form_html<\/code> and <code>elqc_quote_button_html<\/code> let developers adjust the markup without touching the plugin.<\/p><\/dd>\n<dt id=\"which%20languages%20can%20the%20pdf%20quote%20be%20written%20in%3F%20%28pro%29\"><h3>Which languages can the PDF quote be written in? (Pro)<\/h3><\/dt>\n<dd><p>Any language written in the Latin, Cyrillic, Greek, Turkish, Baltic or Thai alphabets. Western European languages work with the built-in typefaces; the others need you to upload your own font once, in the PDF panel, and the plugin then re-encodes it for your alphabet.<\/p>\n\n<p>Japanese, Chinese and Arabic are the exception: the PDF engine cannot set them, so those shops get the quote email, the payment link and the printable page, but no PDF attachment. The plugin says so on screen rather than producing an unreadable file. Everything else, the interface, the emails and the quote page, is fully translated into all 21 languages.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20send%20anything%20to%20your%20servers%3F\"><h3>Does the plugin send anything to your servers?<\/h3><\/dt>\n<dd><p>No analytics, no phone-home to us. Nothing leaves your site unless you switch on a feature that needs it, and each one is listed in the External services section below, and every outgoing call goes to a service you chose and configured with your own keys or addresses.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.17.7<\/h4>\n\n<ul>\n<li>The listing now says two things the plugin already did without telling anyone: variable products are supported, with the chosen variant carried through, and the dashboard search covers the SKU.<\/li>\n<li>Fixed: after sending a quote request, the thank-you message pushed the page title off screen. It now stays in view when the whole confirmation fits, so the customer can still see which page answered her.<\/li>\n<li>New: once a year, a month before the anniversary of the day you installed it, the plugin emails you three numbers over those twelve months: requests received, how many turned into a yes, and what those are worth. Nothing else, no pitch. It stays quiet on a year with no requests, and it switches off under Settings, Notifications.<\/li>\n<\/ul>\n\n<h4>1.17.6<\/h4>\n\n<ul>\n<li>Fixed: in the free version, saving the settings reset the deposit and the reminder to their default values. Their screens are Pro, so nothing posted them any more, and absent was read as cleared. A shop that had set them under Pro lost them on the next save.<\/li>\n<\/ul>\n\n<h4>1.17.5<\/h4>\n\n<ul>\n<li>The listing now answers the six things shop owners actually hesitate about before installing anything, ahead of the technical questions.<\/li>\n<\/ul>\n\n<h4>1.17.4<\/h4>\n\n<ul>\n<li>The quotes dashboard no longer just says \"no quote requests yet\" on a new shop. It says what is still missing for a first request to arrive, and links to where you fix it.<\/li>\n<li>On a quote, the free version used to answer the moment you want to send a price with one grey line. It now says what that reply would actually do.<\/li>\n<li>The listing opens on your day rather than on the plugin.<\/li>\n<\/ul>\n\n<h4>1.17.3<\/h4>\n\n<ul>\n<li>The Tools screen had one card titled \"Test your emails\" whose first setting was a webhook address. Webhooks now have their own card, with their own name.<\/li>\n<li>The Pro block listed \"custom form fields\" among the paid features. The field builder has been free since 1.15: the sentence had simply not followed. Corrected in all 20 bundled languages.<\/li>\n<\/ul>\n\n<h4>1.17.2<\/h4>\n\n<ul>\n<li>The accent colour is escaped where it is written into the stylesheet, and a core file was being loaded that nothing used.<\/li>\n<\/ul>\n\n<h4>1.17.1<\/h4>\n\n<ul>\n<li>The free version no longer ships the code behind the paid features. It never ran there, but shipping a feature and switching it off with a licence check is not allowed on WordPress.org, and it made the plugin read like trialware. Gone from the free package: the file-upload handling, the targeting panel, the priced-quote email and PDF panels, the deposit, the reminder and the quote expiry. The free settings screen now shows only what a free shop can actually use.<\/li>\n<li>Output is escaped on the line that prints it, everywhere. The markup was already built from escaped parts, but that cannot be checked by anyone reading the line, so every one of them now passes through wp_kses() with the plugin's own allow-list.<\/li>\n<li>Three internal test notes written in Markdown were shipping inside the plugin. They are gone, and the build now refuses any archive that carries one.<\/li>\n<li>Tested up to WordPress 7.1.<\/li>\n<\/ul>\n\n<h4>1.17.0<\/h4>\n\n<ul>\n<li>VAT number: an optional field on the quote form for business customers, carried onto the quote screen, the emails and the printable sheet, and with Pro onto the PDF, the WooCommerce order and the CSV export. Hidden by default.<\/li>\n<li>Quotes dashboard: search by customer, email, VAT number or product, with the matching text highlighted in the row; filter by period; sort on quote, customer, products, quantity, date, status and amount; one filter bar on a single row.<\/li>\n<li>Help screen: how the plugin works in four steps, and nine questions answered in full.<\/li>\n<li>All 20 bundled languages brought up to date: 669 strings each, none left in English.<\/li>\n<li>Fixed: searching for a short word such as \"ame\" returned every quote, because the search read the stored structure rather than the stored values.<\/li>\n<li>Fixed: the status pills counted the whole database while the list showed a filtered set.<\/li>\n<li>Fixed: \"Clear\" left the search box and the status pill untouched.<\/li>\n<li>Fixed: the columns shifted on every sort, and the table overflowed its own width on a phone.<\/li>\n<li>Fixed: two quotes created in the same request could be given the same number. The counter was incremented with a direct query but read back through the cache, which returned the value from before. A single quote per web request hid this for months; an import or a bulk action would not have.<\/li>\n<li>Fixed: a duplicated quote had no quantity, no amount and no search line, so it could not be sorted or found until the next sort rebuilt them.<\/li>\n<li>Fixed: the free version pointed nowhere for the paid features. It now links to the product page, since the WordPress.org build carries no store code by design.<\/li>\n<li>The documentation link points at the documentation page rather than the raw folder index, in French or in English.<\/li>\n<\/ul>\n\n<h4>1.16.1<\/h4>\n\n<ul>\n<li>First public release.<\/li>\n<li>Quote form: an optional VAT number field for business customers, carried onto the quote, the emails, the printable sheet, the PDF and the order. Hidden by default.<\/li>\n<li>Help screen: how the plugin works in four steps, and nine questions answered in full.<\/li>\n<li>Quotes dashboard: search by customer, email or product, filter by period, sortable columns, and a single filter bar.<\/li>\n<\/ul>","raw_excerpt":"Today a quote request costs you five emails and a Word file. Here it takes one form, one screen, and about forty minutes less of your day.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/352933","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=352933"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/earnestlabs"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=352933"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=352933"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=352933"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=352933"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=352933"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=352933"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}