=== WpDevArt: Request a Quote & Quote-to-Order for WooCommerce ===
Contributors: wpdevart
Tags: woocommerce, quote, request a quote, request a quote button, woocommerce request for quote
Requires at least: 6.1
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 1.0.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Add Request a Quote buttons, collect quote requests as WooCommerce orders, price and send quotes, and let customers accept and pay online.

== Description ==

Some products have no fixed price: large orders, custom work, trade customers, items made to measure. Our **Request a Quote for WooCommerce** plugin adds an "Add to quote" button to your store, collects the products in a quote list, and turns every request into a real WooCommerce order that you price in WooCommerce's own order editor. The customer gets an email with a link, accepts, declines or asks for changes without logging in, and pays the accepted quote on WooCommerce's standard Pay for order page.

The whole loop is in the free plugin: request, inbox, pricing, sending, acceptance and payment. Everything in the free plugin stays free.

Because every quote is a WooCommerce order, you keep WooCommerce's search, filters, order notes, emails, taxes, shipping, coupons and payment gateways. Quote statuses carry the plugin's own prefix, stay out of the normal orders view, out of WooCommerce Analytics and out of My Account → Orders until the customer accepts, and are never cancelled automatically.

➡ **[GET PREMIUM VERSION NOW!](https://wpdevart.com/woocommerce-request-a-quote-plugin)**

[GET SUPPORT](https://wordpress.org/support/plugin/wpdevart-request-a-quote-quote-to-order-for-woocommerce/)

https://www.youtube.com/watch?v=JqUsLItgS60

= Free version features =

* **Add to quote buttons in every theme** — On product pages, shop, category and search pages, related products, upsells and Product Collection grids, beside Add to cart or instead of it.
* **Variable and grouped products** — Each variation is its own line, "Any" attributes work, and minimum, maximum and step quantities are respected.
* **Quote list page with per-line notes** — A ready-made "Request a Quote" page where shoppers change quantities, remove lines and add a note to each line.
* **Guests welcome** — No account needed; the quote list joins the customer's account when they log in.
* **Cache-friendly** — No PHP sessions, and the buttons refresh their state on cached pages.
* **Button styles and labels** — A button or a text link, with your own labels and your theme's look or your own colors.
* **Block, shortcode and Elementor widget** — Place the button or the quote list anywhere with blocks, shortcodes or Elementor widgets.
* **All products, selected categories or single products** — Include or exclude categories, or switch the quote button on per product and per variation.
* **Who can request** — Everyone, or logged-in customers only.
* **Only when out of stock** — Optionally offer quotes only for products that are out of stock or on backorder.
* **Hide prices and Add to cart** — On all products, on quotable products, in selected categories or per product, with a text such as "Price on request".
* **No prices before the quote is priced** — Customers see "Awaiting price" and no totals until you send the quote.
* **Quote inbox on real WooCommerce orders** — WooCommerce's orders list filtered to quotes, with a count of new requests, a view per quote status and bulk status changes.
* **Price and send in the order editor** — Change prices and quantities, add products, shipping, fees, coupons and tax, write a message and press Send quote.
* **Create a quote for a customer** — Start a draft quote for phone and email requests, or turn a pending order into a quote.
* **Duplicate a quote** — Start a new draft from any quote.
* **Print or save as PDF** — A print-ready view of the quote with the browser's Print / Save as PDF.
* **Import from other quote plugins** — Bring over quotes that several popular quote plugins stored as WooCommerce orders, with a dry-run count first.
* **Accept online, no login needed** — Through a signed link in the quote email, the customer accepts, declines with an optional reason or asks for changes.
* **Accepted quote becomes a payable order** — The same order moves to Pending payment, and the customer pays on WooCommerce's Pay for order page with any of your payment methods.
* **Safe links** — Links expire, a resent quote gets a new link, and one button switches every old link off.
* **My Account → Quotes** — Customers view, accept, pay, print and request their quotes again from their account.
* **Five WooCommerce emails** — New quote request, Request received, Your quote is ready, Customer response and Quote accepted – pay now.
* **Native and editable emails** — Managed in WooCommerce → Settings → Emails, and they work with SMTP and email-customizer plugins and the block email editor.
* **Clear items table** — Product image, name, SKU, variation and line note in every email, and every email sent is logged as an order note.

= Premium version features =

* **Branded PDF quotes** — A real PDF with your logo, colors, company details and terms, attached to the quote email, with a working Accept link.
* **Quote validity, reminders and follow-ups** — Valid-until dates, automatic expiry, and reminders for expiring, unanswered and accepted-but-unpaid quotes.
* **Advanced quote rules** — Rules by user role, customer, stock, price range and country, each with its own button mode and price text.
* **Custom request fields and file uploads** — Your own fields for the whole request or per line, and secure file uploads for the whole request.
* **Cart and Mini-Cart to quote** — A "Request a quote for this cart" button in the Cart block, the classic cart and the Mini-Cart.
* **Custom quote numbers** — Numbering such as Q-2026-0001, with prefix, suffix and padding.
* **Quote export and bulk tools** — Filters by date, customer and value, CSV export, and bulk resend and expire.
* **Checkout-as-quote** — A "Request a quote" payment method that turns the checkout into a quote request.
* **Quote revisions** — Every send that changes a quote keeps a version; see what changed and restore an earlier version before the quote is accepted.
* **Negotiation: target prices and counter-offers** — Customers propose target prices and counter a sent quote.
* **Payment and acceptance controls** — Payment methods for quotes, payment deadlines, acceptance with a PO number or a typed name.
* **Sales team: assign and route quotes** — Assign quotes to staff or route them automatically.
* **Quote analytics** — The funnel from request to payment, win rate, time to quote and top quoted products.
* **Automation pack** — Automatic quotes at catalog prices, automatic approval of small requests, accounts for guest requesters.
* **Quick Quote Pad** — Add products by SKU or name, paste a list from a spreadsheet or upload a CSV file.
* **Reorder with Duplicate & Repeat Orders** — An accepted quote becomes a reorder template at the agreed prices.
* **Margin guard and mini quote drawer** — Cost and margin per line in the editor (with WooCommerce's Cost of Goods Sold), and a mini quote list that opens as a dropdown or a slide-in panel.
* **Quote templates** — Save a quote as a template and start new quotes from it.
* **Deposits on quotes** — A deposit on acceptance and the balance later, with its own payment link.
* **Quote count icon** — A header icon with a live item count.
* **Setup wizard and test quote** — A short setup and a test quote that runs from request to payment.
* **Cloudflare Turnstile and other spam checks** — Optional Turnstile, reCAPTCHA v3 or hCaptcha on the request form.
* **Quick quote popup** — A one-product request form in an accessible dialog.
* **Quote webhook topics** — Quote created, sent, accepted and declined topics in WooCommerce's webhook settings.
* **Settings import/export** — Move the plugin settings between stores as a JSON file, with a preview before anything is saved (secrets are never exported).

➡ **[GET PREMIUM VERSION NOW!](https://wpdevart.com/woocommerce-request-a-quote-plugin)**

= Buttons and quote list =

* **Add to quote buttons that work in every theme** — On product pages (classic and block themes), in shop, category and search pages, related products, upsells and Product Collection grids, beside Add to cart or instead of it.
* **Variable and grouped products** — Several variations of one product sit as separate lines, "Any" attributes work, attribute names (not slugs) show everywhere, minimum, maximum and step quantities are respected.
* **Quote list page with per-line notes** — A "Request a Quote" page is created for you. Shoppers change quantities, remove lines and add a note to each line. List prices appear only where the store shows them anyway, and the list never shows a total.
* **Guests welcome** — No account needed. The list is kept with a private cookie and joins the customer's account when they log in.
* **Cache-friendly** — No PHP sessions; the page tells caching plugins not to cache it and the buttons refresh their state on cached pages.
* **Button styles and labels** — A button or a text link, your own labels, your theme's look or your own colors.
* **Block, shortcode and Elementor widget** — Place the button or the quote list anywhere with the Add to quote block, the Quote List block, the [wpdevart_raq_button] and [wpdevart_raq_quote] shortcodes or the Elementor widgets.

= Choose what can be quoted and hide prices =

* **All products, selected categories or single products** — Include or exclude categories, or switch the quote button on per product and per variation from the new Quote tab, the products list column and bulk edit.
* **Who can request** — Everyone, or logged-in customers only (guests see a "Log in to request a quote" link or nothing).
* **Only when out of stock** — Optionally offer quotes only for products that are out of stock or on backorder.
* **Hide prices and Add to cart** — On all products, on quotable products, in selected categories or per product, with a text such as "Price on request". Prices are hidden at the data level: the price, the cart button, blocks, search, quick view and structured data all follow the same rule.
* **No prices before the quote is priced** — Until you send the quote, the customer sees "Awaiting price" and no totals in the emails, on the quote page, in My Account and in WooCommerce's own customer emails.

= Quote inbox, pricing and sending =

* **Quote inbox on real WooCommerce orders** — A Quotes entry in the WooCommerce menu and in the plugin menu opens WooCommerce's orders list filtered to quotes, with a count of new requests, a view per quote status, a Quote column and bulk status changes.
* **Price and send in the order editor** — Change prices and quantities, add products, shipping, fees, coupons and tax, write a message to the customer and press Send quote. Unpriced lines, a zero total and products short of stock are flagged before sending.
* **Create a quote for a customer** — "New quote" opens WooCommerce's order screen as a Draft quote for phone and email requests. "Send as quote" turns a pending order into a quote.
* **Duplicate a quote** — Start a new draft from any quote.
* **Print or save as PDF** — A print-ready view of the quote for you and your customer, with the browser's Print / Save as PDF.
* **Import from other quote plugins** — Bring over quotes stored as WooCommerce orders by several popular quote plugins, with a dry-run count first.

= Accept, decline, changes and payment =

* **Accept online, no login needed** — The quote email links to the quote through a signed link. The customer accepts, declines with an optional reason or asks for changes.
* **Accepted quote becomes a payable order** — On acceptance the same order moves to Pending payment and the customer pays on WooCommerce's Pay for order page with any of your payment methods, offline ones included.
* **Safe links** — Links expire, a resent quote gets a new link, and "Invalidate all quote links" switches every old link off at once.
* **My Account → Quotes** — Customers see their quotes and their status, and view, accept, pay, print and request a quote again from there.

= Emails =

* **Five WooCommerce emails** — New quote request (admin), Request received (customer), Your quote is ready (customer), Customer response (admin) and Quote accepted – pay now (customer).
* **Native and editable** — Subjects, headings, recipients and texts are managed in WooCommerce → Settings → Emails, they work with SMTP and email-customizer plugins, with WooCommerce's email preview and with the block email editor.
* **Clear items table** — Product image, name, SKU, variation and line note, and the quote number in the subject. Every email sent is logged as an order note.

= Built for today's WooCommerce =

* Works with High-Performance Order Storage (HPOS) and the classic posts storage.
* Works with block themes (Product Collection, Products block, the block product page) and classic themes, and alongside the Cart and Checkout blocks.
* Payment uses WooCommerce's standard Pay for order page, which is always the classic form.
* Built-in spam protection on the request form: a honeypot, a time trap and rate limits, without third-party services.
* Translation ready, WPML ready, RTL ready.
* All templates can be overridden from your theme.

= Who is it for? =

* **B2B and wholesale stores** whose prices depend on quantity, customer or project.
* **Made-to-order and custom products** that need a price before they can be bought.
* **Stores with large or complex orders** where customers want a confirmed price first.
* **Catalog sites** that show products without prices and take inquiries instead.

= Developer friendly =

* Functions: `wpdevart_raq_product_mode()` (the single decision for buttons and price hiding), `wpdevart_raq_is_quote()`, `wpdevart_raq_quote_state()`, `wpdevart_raq_get_quote_link()`, `wpdevart_raq_lifecycle()`.
* Filters: `wpdevart_raq_product_mode`, `wpdevart_raq_is_product_quotable`, `wpdevart_raq_price_text`, `wpdevart_raq_button_label`, `wpdevart_raq_button_html`, `wpdevart_raq_request_form_fields`, `wpdevart_raq_validate_request`, `wpdevart_raq_create_quote_args`, `wpdevart_raq_quote_actions`, `wpdevart_raq_accept_status`, `wpdevart_raq_link_expires`, `wpdevart_raq_email_attachments`, `wpdevart_raq_capability`, `wpdevart_raq_client_ip`, `wpdevart_raq_default_settings`, `wpdevart_raq_settings_fields`, `wpdevart_raq_template_file`
* Actions: `wpdevart_raq_loaded`, `wpdevart_raq_quote_created`, `wpdevart_raq_quote_requested`, `wpdevart_raq_quote_sent`, `wpdevart_raq_quote_responded`, `wpdevart_raq_quote_accepted`, `wpdevart_raq_quote_declined`, `wpdevart_raq_quote_paid`, `wpdevart_raq_quote_status_changed`, `wpdevart_raq_settings_tab_content`, `wpdevart_raq_settings_saved`
* JavaScript: `window.wpdevartRaq` and the `wpdevart_raq_line_added`, `wpdevart_raq_list_updated` and `wpdevart_raq_request_sent` events.

Have questions, ideas or suggestions? [Share them with us](https://wordpress.org/support/plugin/wpdevart-request-a-quote-quote-to-order-for-woocommerce/).

== Installation ==

1. Install and activate WooCommerce.
2. Install and activate WpDevArt: Request a Quote & Quote-to-Order for WooCommerce from the Plugins screen (or upload it to `/wp-content/plugins/`).
3. Open **WpDevArt Quotes → Settings**: choose what can be quoted, where the buttons appear and whether prices are hidden. The getting-started checklist on the General tab walks you through the rest. The "Request a Quote" page is created for you.

== Frequently Asked Questions ==

= How does it work? =

Shoppers add products to a quote list and send a short form. Each request becomes a WooCommerce order in the "New request" status. You open it in WooCommerce's order editor, set the prices and press Send quote in the Quote box. The customer opens the emailed link, accepts, declines or asks for changes, and pays the accepted quote on WooCommerce's Pay for order page.

= Does it work with caching plugins? =

Yes. The quote page and quote links tell caching plugins not to cache them, the plugin uses no PHP sessions, and buttons on cached pages refresh their state with a small request. If your caching plugin ignores those signals, exclude the quote page from the cache.

= Can I override the templates? =

Yes. Copy storefront templates from the plugin's `templates` folder to `your-theme/wpdevart-request-a-quote-quote-to-order-for-woocommerce/`, keeping their path. Email templates go to `your-theme/woocommerce/emails/` (and `plain/` for the plain-text versions), like WooCommerce's own; their file names start with `wpdevart-raq-`.

= Does it work with HPOS and the block editor? =

Yes. The plugin declares compatibility with High-Performance Order Storage and with the Cart and Checkout blocks. Buttons appear in classic and block themes, including Product Collection grids, and the plugin adds an Add to quote block and a Quote List block.

= Can I import quotes from another quote plugin? =

Yes. The import tool on the Advanced tab finds quotes that other quote plugins stored as WooCommerce orders, shows how many it found per status, and moves the ones you select to this plugin's statuses in the background. Running it again is safe: orders already imported are skipped.

= Why do products with hidden prices drop out of Google Shopping listings? =

A product without a visible price has no price in its structured data either, and search engines need a price for product listings. That is the honest result of hiding the price; switch price hiding off for products you want listed with a price.

= Other plugins treat every quote request as a new order. Why? =

Each request is a WooCommerce order, so WooCommerce announces it the way it announces every new order. Plugins that react to every new order (stock sync, accounting, CRM connectors) may see quote requests too. WooCommerce's own emails and Analytics leave quotes alone until they are accepted.

= Does the plugin send data to external services? =

No. It makes no requests to external services and stores its data in your own database. See the External services section.

= How do I remove all data when I delete the plugin? =

Turn on "Delete data on uninstall" under WpDevArt Quotes → Settings → Advanced. When the plugin is deleted, its settings, quote lists and the quote data stored on products and orders are removed. Orders are never deleted. Orders still in a quote status move to Cancelled when the plugin is deleted, with or without that setting, because their quote statuses no longer exist. With the setting off, the data stays and those orders get their quote status back when the plugin is installed again. With it on, they stay Cancelled.

= Spam protection blocks real customers behind a CDN or proxy. What can I do? =

The rate limits count requests per visitor IP address. Behind a proxy on your own server or network, the plugin reads the address the proxy passes on. Behind a CDN whose server does not pass the visitor's address on, every visitor can look like the same address: use the `wpdevart_raq_client_ip` filter to return the header your CDN provides, or raise the limits on the Request Form tab.

= How do I translate the plugin? =

It is translation-ready with the text domain `wpdevart-request-a-quote-quote-to-order-for-woocommerce`. Translations can be contributed on translate.wordpress.org. WPML and Polylang users can translate the settings texts and the quote emails under String Translation.

= Does the Premium version replace the free version? =

No. The Premium version is a separate add-on that extends the free plugin. Both stay installed and active.

== Screenshots ==

1. Request a Quote Popup
2. Request a Quote Buttons
3. Request a Quote Analytics
4. Request a Quote Settings
5. Quote Rules Settings
6. Sales Team Settings

== External services ==

The plugin makes no automatic requests to any external service: no tracking, no update pings and no remotely loaded assets.

The only third-party destinations it links to are opened by the administrator on purpose, from the plugin's own screens, and receive nothing but the click:

* **wpdevart.com** — the "Get Premium" and Featured Themes / Featured Plugins links lead to the developer's website. [Privacy policy](https://wpdevart.com/privacy-policy/).
* **wordpress.org** — the "Get Support" link opens the plugin's support forum, and the review request links to its review form.

== Changelog ==

= 1.0.0 =

* Initial release.