Setup guide · about 5 minutes

Setting up Demfilz Quote Cart

Install, review the Quotes settings, link the quote page, then price and send your first quote from the normal order screen. This guide covers every setting, the quote page, pricing and sending, what the customer sees, quotes for phone and email enquiries, the emails, the developer hooks and what to check when something does not look right.

1. Install and activate

In your WordPress dashboard go to Plugins → Add New, search for Demfilz Quote Cart, install it and activate it (or upload demfilz-quote-cart-for-woocommerce.zip from WordPress.org under Plugins → Add New Plugin → Upload Plugin). WooCommerce must be installed and active (WooCommerce 8.3 or later, WordPress 6.3 or later, PHP 7.4 or later). Activation creates a page called Quote holding the [dqcw_quote_cart] shortcode, and the plugin adds WooCommerce → Settings → Quotes, a WooCommerce → Quotes menu, three order statuses (Quote request, Quote sent and Quote declined), four WooCommerce emails, a Quote tab in the product data box and a Quotes tab in My Account.

Review the settings straight away: by default Add to quote appears next to Add to cart on every product, and products without a price (empty or zero) become quote only for everyone.

2. WooCommerce → Settings → Quotes

The Quotes tab has three sections, linked across the top: Buttons and prices, Request form and Quotes.

Buttons and prices

SettingWhat it does
Show Add to quote onAll products (default), Products in the categories below, or Only products set to it in their Quote tab.
CategoriesThe categories used by the option above. Subcategories are included.
ForEveryone (default), Visitors who are not logged in, or Logged-in customers. For example, guests get quotes only and hidden prices while logged-in trade customers shop normally.
On those productsShow Add to quote next to Add to cart (default), or Replace Add to cart with Add to quote (quote only). A quote-only product is refused at every storefront add to cart route: the product form, add to cart links, AJAX and the cart and checkout blocks.
Products without a priceOn by default. Products with an empty or zero price become quote only, for everyone, instead of showing nothing.
Hide pricesOn by default. Quote-only products show the text below instead of the price, on product pages, in grids, in the Store API and in search engine data. The price is also left out of variation data, and while prices are hidden the price filters are switched off and price sorting is ignored, so a hidden price cannot be worked out by filtering or sorting.
Text instead of the priceEmpty shows "Price on request".
Button textEmpty shows "Add to quote".
Quote pageThe page holding [dqcw_quote_cart]: the shopper's list, the request form and the page customers open their quotes on. It is created on activation. If it is missing or not published, a warning appears in this section; choose a page, or save the settings with the field empty to create a new one.
Prices in the listOff by default. Shows today's prices and an estimate in the shopper's quote list. Hidden prices stay hidden.

Request form

Name and email address are always asked for. Logged-in customers get their saved details filled in.

SettingWhat it does
GuestsOn by default: visitors can request a quote without logging in. Off: the quote page asks them to log in before sending, and their list is kept.
PhoneDo not ask, Optional (default) or Required.
CompanyDo not ask, Optional (default) or Required.
Delivery addressDo not ask, Optional (default) or Required, with WooCommerce's own country and state fields. Used to quote freight and tax; it becomes the order's billing and shipping address, which you can edit before sending.

Spam protection needs no captcha: a hidden honeypot field, a limit of five requests per hour per IP address (per /64 for IPv6) and an hourly ceiling for guest requests across the whole site.

Quotes

SettingWhat it does
Quotes are valid forDays after sending, 30 by default (1 to 365). You can change the date on each quote.
Quote termsShown under every sent quote: on the customer's quote page, the printable quote and the "Your quote" email. For example your ABN, payment terms, lead times and what the price includes.
UninstallOff by default. Delete the settings, the quote page and the product quote settings when the plugin is deleted. Quote orders are always kept.

The product Quote tab

The Quote tab in a product's data box overrides the store settings for that product, for every visitor: Use the store settings, Add to cart and Add to quote, Quote only (hide Add to cart) or No quotes for this product. Quote only also hides the price when Hide prices is on.

3. The quote page and the quote link

Add to quote appears on product pages and in product grids. On a variable product the button is ready once the options are chosen; in grids it appears on simple products that are in stock, and variable products are added from their product page. Adding a product shows a notice with a View quote link, with or without JavaScript.

The Quote page shows the shopper's list: image, name, chosen options, an editable quantity, an optional note per line and a remove button, with Update quote and the request form underneath. An empty list links back to the shop. When the shopper clicks Request a quote they see a thank you message with the quote number and get the Quote request received email, and you get the New quote request email. The same page is where customers later open their quotes.

Add the page to your menu. For a link with the number of products, put [dqcw_quote_link] in a Shortcode block or widget in your header; [dqcw_quote_link label="My quote"] changes the word shown. The count stays right on page-cached pages because it updates itself from a cookie.

4. Pricing and sending a quote

Open WooCommerce → Quotes (the orders list filtered to Quote request, with the number waiting beside the menu) or the link in the New quote request email. The request is a normal order: the lines start at today's catalogue prices, with the customer's details and address, their message as the customer note and each line's note shown under it.

StepWhat to do
Price the linesChange the line costs in the items box, add a shipping line, fees or a coupon, and click Recalculate. If your catalogue prices include tax, enter line costs excluding tax and recalculate to add it; the Quote box reminds you.
Valid untilIn the Quote box, leave the date empty for the default (30 days from sending), or pick a date for this quote.
Message to the customerOptional. Shown on the customer's quote page and in the "Your quote" email.
SendTick "Send the quote to the customer when I update the order" and click Update. Choosing Send quote to customer under Order actions, or setting the status to Quote sent, does the same.
After sendingThe status becomes Quote sent, a note is added to the order and the Quote box confirms who it was sent to. If the "Your quote" email is switched off or could not be sent, the box shows a warning with the customer's quote link instead, so you can send it to them yourself.

A quote with a zero total cannot be sent; the Quote box asks you to enter the line prices first, and the customer's email address must be on the order. To change a sent quote, edit the order and send it again (the tick now reads "Send the updated quote to the customer when I update the order"): the customer gets the updated quote and the old one is replaced. Once the customer has accepted or declined, the quote is closed. View the customer's quote page in the box opens a preview without the answer buttons. The Quote column on the orders list shows each quote's state, such as Being prepared, Ready to accept, Expired or Declined, with its valid until or expiry date.

5. What the customer sees

WhereWhat
"Your quote" emailThe priced quote and a link to their quote page.
Quote pageThe quote number, request date, status and valid until date, your message, the items with prices and totals, your quote terms, Accept and pay, Decline this quote and Print or save as PDF.
Accept and payThe stock for the quoted quantities is checked and held with WooCommerce's stock reservation, the order moves to Pending payment, and the customer lands on WooCommerce's Pay for order page at exactly the quoted total. Nothing is recalculated, so your shipping and fees stay put, and they can pay with any of your payment methods, including bank transfer. You get the Quote answered email, and WooCommerce's normal order emails follow. If there is no longer enough stock, the customer is told, the quote stays open and a note is added to the order so you can follow up.
DeclineAn optional reason, then the order moves to Quote declined. The reason is saved in the order notes and you get the Quote answered email.
ExpiryAfter the valid until date the quote shows as expired and cannot be accepted. Request an updated quote puts it back to Quote request and emails you; price it and send it again.
My Account → QuotesEvery quote with its number, date, status, total (or "To be quoted") and the next step: View, Review and accept, or Pay. Open quotes stay out of My Account → Orders until accepted.

The quote link carries the order key, like WooCommerce's own Pay for order links. A quote that belongs to a customer account opens and is paid only while logged in to that account, so a colleague cannot pay it from a forwarded link. Accept and decline are buttons on the page, never plain links, so email scanners that open links cannot answer a quote by accident. Open and declined quotes are left out of WooCommerce Analytics, and accepted quotes waiting for payment are not cancelled by WooCommerce's unpaid order clean-up.

6. Quotes for phone and email enquiries

Go to WooCommerce → Orders → Add order, add the products and the customer's details (including their email address), set the status to Quote request and save. The order becomes a quote with the Quote box, and a note records that the store turned it into a quote. Price it and send it like any other. Choosing Quote sent straight away turns it into a quote and sends it in one step.

7. The emails

Four WooCommerce emails under WooCommerce → Settings → Emails, each one can be switched on and off, edited and previewed:

EmailSent
New quote requestTo you, when a customer sends a quote request.
Quote request receivedTo the customer, to confirm their request arrived.
Your quoteTo the customer, with the priced quote and the link to accept and pay.
Quote answeredTo you, when a quote is accepted, declined or an update is asked for.

The templates live in the plugin's templates/emails/ folder and can be copied into yourtheme/woocommerce/emails/ like any WooCommerce email.

8. For developers

HookUse
dqcw_added_to_list, dqcw_request_created, dqcw_validate_requestActions when a product is added to the list, when a request is created, and while a request is validated.
dqcw_quote_sent, dqcw_quote_accepted, dqcw_quote_declined, dqcw_update_requestedActions when a quote is sent, accepted, declined, and when the customer asks for an updated quote.
dqcw_product_mode, dqcw_supported_typesFilters: a product's quote mode, and which product types can be quoted.
dqcw_form_fields, dqcw_rate_limitFilters: the request form fields, and the requests allowed per hour per IP address.
dqcw_can_accept, dqcw_accept_redirect, dqcw_account_endpointFilters: whether a quote can be accepted, where accepting sends the customer, and the My Account endpoint slug.

Quote orders have created_via set to dqcw and the statuses wc-dqcw-request, wc-dqcw-sent and wc-dqcw-declined. Order meta: _dqcw_state, _dqcw_requested_at, _dqcw_sent_at, _dqcw_valid_until (Y-m-d), _dqcw_message and _dqcw_answered_at. Line notes are the order item meta dqcw_note, and the product setting is the product meta _dqcw_mode (both, quote or off).

Troubleshooting

Add to quote does not show: only simple and variable products can be quoted (not grouped or external products), and they must be in stock. Check Show Add to quote on (a category rule, or "Only products set to it in their Quote tab") and that the product's Quote tab is not set to "No quotes for this product". If For is "Visitors who are not logged in", you will not see the button while logged in as the shop manager, so check in a private window. On a variable product the button works once the options are chosen, and in product grids it appears on simple products only. If you use page caching, clear the cache after changing the settings.

Quote links do not open: the quote page is missing or not published (deleted, in the bin, or set back to draft). WooCommerce → Settings → Quotes then shows a warning under Quote page: choose a published page holding [dqcw_quote_cart], or save the settings with the field empty to create a new one. A quote that belongs to a customer account also needs that account to be logged in, and "Sorry, this quote link is not valid" means the link was cut short or changed.

Emails do not arrive: check that the four quote emails are switched on under WooCommerce → Settings → Emails, and look at the Quote box after sending: it warns you when the "Your quote" email could not be sent and gives you the customer's link. Most often the site's mail is not being delivered at all; send it through a proper mail server with an SMTP plugin such as Demfilz SMTP Mailer, and ask customers to check their spam folder.

Prices still show, or a price filter disappeared: Hide prices applies to quote-only products only, so set On those products to quote only (or Quote only in the product's Quote tab); products with Add to quote next to Add to cart keep their price. If For is set to guests, logged-in customers see prices on purpose, so check in a private window, and clear any page cache. Price filters are switched off and price sorting is ignored while prices are hidden, so a hidden price cannot be worked out; this is by design.

What happens if I deactivate or delete the plugin: quotes stay in your orders. While the plugin is inactive, orders with the quote statuses are not shown in the orders list (WooCommerce only lists statuses it knows); reactivate the plugin to see them again. Deleting the plugin keeps the settings and the quote page too, unless the Uninstall setting is ticked first.

Stuck, or want it customised?

We build and customise WooCommerce plugins for a living. If your store needs custom quote fields, freight rules, trade price lists or a link to your ERP or CRM, tell us what and we'll quote it.