Title: NuxWP Devis – Quote Requests for WooCommerce
Author: Kais Chrouda
Published: <strong>November 8, 2026</strong>
Last modified: November 8, 2026

---

Search plugins

![](https://ps.w.org/nuxwp-devis/assets/banner-772x250.png?rev=3791419)

![](https://ps.w.org/nuxwp-devis/assets/icon-256x256.png?rev=3791416)

# NuxWP Devis – Quote Requests for WooCommerce

 By [Kais Chrouda](https://profiles.wordpress.org/kais1977/)

[Download](https://downloads.wordpress.org/plugin/nuxwp-devis.1.5.2.zip)

 * [Details](https://wordpress.org/plugins/nuxwp-devis/#description)
 * [Reviews](https://wordpress.org/plugins/nuxwp-devis/#reviews)
 *  [Installation](https://wordpress.org/plugins/nuxwp-devis/#installation)
 * [Development](https://wordpress.org/plugins/nuxwp-devis/#developers)

 [Support](https://wordpress.org/support/plugin/nuxwp-devis/)

## Description

**NuxWP Devis** (_devis_ is French for “quote”) lets your customers build their 
cart as usual and, instead of paying, **ask for a quote** — with one button on the
cart page.

Most quote plugins replace “Add to cart” and hide prices behind a separate “quote
basket”. NuxWP Devis does the opposite: the cart stays a cart, and becomes a quote
only when the customer wants one. Perfect for B2B shops, wholesalers and any store
where large baskets deserve a negotiated price.

#### How it works

 1. The customer fills the cart and clicks **Request a quote** on the cart page.
 2. A confirmation modal opens — with an optional message — and the request is sent.
    The cart is emptied, a **PDF quote** is generated, e-mails go out to the customer
    and to you.
 3. In **WooCommerce  Quotes** you review the request, apply **line discounts** and/
    or a **global discount**, set the expiry date and change the status (_Pending  
    Quoted  Accepted_). The PDF is regenerated and the customer is notified at every
    step.
 4. In **My Account  My quotes** the customer sees the quote, downloads the PDF and,
    once accepted, clicks **Accept and pay**: the quote is loaded back into the cart
    with the negotiated prices, the cart is **locked** (no quantity change, no coupon,
    no extra product) and goes to checkout.
 5. The quote is marked **Ordered** once the order is paid / confirmed. Quotes expire
    automatically on their expiry date.

#### For your customers

 * **Request a quote** button on the cart page — classic cart and **block cart**(
   WooCommerce Blocks slot)
 * Optional **message** with the request
 * **My quotes** tab in My Account: list, detail, status, PDF download, customer
   message
 * **Accept and pay** on accepted quotes: frozen negotiated prices, locked cart,
   one-click checkout
 * E-mails at every step: request received, priced, accepted, declined, expired,
   ordered (responsive HTML, PDF attached)

#### For you

 * **WooCommerce  Quotes** dashboard: counters per status, search, filters, pending
   badge in the menu
 * **Line discounts and a global discount**, exact tax computation with the real
   product tax rates for the customer, single rounding — no phantom cents
 * **Expiry date**, status workflow, message to the customer, delete
 * **Automatic PDF quote** (zero dependency) with your logo, company details, registration
   and VAT numbers, footer note
 * **Who can request**: any logged-in customer or selected roles
 * **Cart button styled from the settings**: filled / outline / text link, colours,
   hover, size, radius, full width, icon, live preview
 * **Texts** settings: rewrite the phrases your customers see (cart, modal, My account,
   statuses, e-mails) without a translation plugin
 * **EN / FR switch** for the admin screen (per user); other languages via translate.
   wordpress.org or Loco Translate
 * HPOS compatible, no theme dependency, no external service, no tracking

#### NuxWP Devis Pro (separate add-on)

This plugin is complete and fully functional on its own. A separate, paid add-on
adds: a quote button on **single product pages** and in **product grids**, **product
rules** (categories, per-product “Quote” tab, quantity threshold), **out of stock
quote**, **customer file attachments** and an **ERP bridge** (Sage, Odoo, EBP…).
Learn more at https://nuxwp.com/nuxwp-devis-pro.

### All settings

Everything is in **WooCommerce  Quotes  Settings**.

#### Quote requests

 * **Show the “Request a quote” button on the cart page** — on/off. In the block
   cart the button is placed automatically in the totals area; the `[devisqr_button]`
   shortcode places it anywhere else.
 * **Minimum cart total (incl. tax)** — 0 = no minimum. Computed on the products
   at catalog price including tax (shipping, fees and coupons are not part of a 
   quote). Below the minimum the button stays locked and shows “From X”.
 * **Who can request a quote** — _Any logged-in customer_ or _Only the selected 
   roles_ (role chips). Shop managers and administrators can always request. Guests
   are sent to the login page.
 * **Quote validity (days)** — default 15. Printed on the PDF and in the e-mails;
   quotes past their date switch to _Expired_ automatically (daily) and can no longer
   be paid.
 * **Quote number prefix** — letters and digits, e.g. `QT`  `QT-202610-0001` (sequential
   per month).
 * **Let the customer add a message to the request** — on/off.

#### Cart button

 * **Position (classic cart)** — after the cart totals / before “Proceed to checkout”/
   after “Proceed to checkout” / top of the cart / manual (shortcode only).
 * **Alignment** — left / center / right (on phones the cart button is always full
   width).
 * **Button text** — default “Request a quote”.
 * **Style** — _Look_ (filled / outline / text link), _Size_ (small / medium / large),
   _Corner radius_, _Background_, _Text_, _Border_, _Hover background_, _Hover text_,
   _Full width_, _Show the icon_, with a live preview.

#### Texts & translations

Rewrite the essential phrases without a translation plugin (they apply to what customers
see; back-office screens keep the original wording). Each field shows the current
wording in grey; type yours to replace it (applies to PHP and JavaScript). Keep 
the `%s` placeholders where they appear. Groups: _Cart & quote request_ (button 
label, minimum notice, modal title/text/fields/buttons, success message, locked-
cart messages, contact link), _My account_ (tab title, empty state, PDF button, 
pay button, back link, team message label), _Status labels_, _E-mails_ (the three
subjects, greeting, every sentence of the “request received” and status e-mails,
button labels, footer line, shop notification title/button).

#### E-mails & contact

 * **Notification e-mail(s) for new requests** — one or more addresses, comma-separated.
   Default: the site admin e-mail.
 * **Sender e-mail (From)** — default: the WooCommerce sender address.
 * **Contact e-mail shown to customers** — in e-mails and “contact us” links. Default:
   the site admin e-mail.
 * **Contact page URL (optional)** — used for the “contact us” links instead of 
   a mailto link.
 * **Send me a test e-mail** — sends the “request received” e-mail with sample data
   to your own address, using the saved settings. Handy to check your SMTP setup
   and the rendering of your logo, colour and texts.

E-mails share one sober, responsive template: your logo (the one chosen in Company
details & PDF, else the theme logo) or the site name, a thin accent rule, the message,
a quote card (number, date, validity), the products and totals, one button, and 
your company details in the footer. The accent colour (default dark blue) can be
changed with the `devisqr_email_accent_color` filter.

#### Company details & PDF

 * **Logo (PDF & e-mails)** — PNG, JPEG, WebP, GIF or AVIF from the media library(
   no SVG); falls back to the theme’s site logo. Non-PNG/JPEG files are converted
   once to PNG in `uploads/devisqr-branding/` so they print on the PDF and display
   in every e-mail client.
 * **Company name, Address, Postcode, City, Phone, E-mail printed on the PDF, Company
   registration no., VAT number** — empty fields fall back to the site name and 
   the WooCommerce store address.
 * **Footer note on the PDF** — default “This document is a quote, not an invoice.
   Keep it for your records.”

#### Uninstall

 * **Delete all quotes, PDFs and settings when the plugin is deleted** — off by 
   default. When on, deleting the plugin drops the two tables, the options, the 
   rate-limit transients and the `uploads/devisqr-quotes` folder.

#### Admin language

At the top of **WooCommerce  Quotes**: **EN / FR** switch (per user) and a ↺ button
to follow the site language again. The switch changes the admin screen, status labels
and menu for this plugin only.

### Shortcodes

 * `[devisqr_button]` — the cart quote button (respects the minimum, the roles and
   the locked-cart state). Useful in a block cart layout or a custom cart template.

### Developers

Actions: `devisqr_quote_created` (quote_id), `devisqr_quote_status_changed` (quote_id,
status, old_status), `devisqr_quote_converted` (quote_id, order), `devisqr_before_delete_quote`(
quote).

Filters: `devisqr_settings`, `devisqr_user_can_request` (bool, user), `devisqr_allowed_roles`,`
devisqr_min_cart_total`, `devisqr_cart_button_hook` (hook, position), `devisqr_account_endpoint`(
default `quotes`), `devisqr_pdf_company_info`, `devisqr_converting_order_statuses`(
default processing, completed, on-hold), `devisqr_email_accent_color`, `devisqr_buttons_inline_css`.

REST namespace: `devisqr/v1` — customer routes (`/submit`, `/quotes`, `/quotes/{
id}`, `/quotes/{id}/add-to-cart`) require a logged-in user; admin routes (`/admin/*`)
require `manage_woocommerce`.

Data: tables `{prefix}devisqr_quotes` and `{prefix}devisqr_quote_items`; option `
devisqr_settings`; files in `uploads/devisqr-quotes/` (unguessable names, `.htaccess`
protected, served only through nonce-protected links to the owner or shop managers).

## Screenshots

[⌊The "Request a quote" button on the cart page⌉⌊The "Request a quote" button on
the cart page⌉[

The “Request a quote” button on the cart page

[⌊Confirmation modal with optional message⌉⌊Confirmation modal with optional message⌉[

Confirmation modal with optional message

[⌊"My quotes" tab in My Account⌉⌊"My quotes" tab in My Account⌉[

“My quotes” tab in My Account

[⌊Quote detail with "Accept and pay"⌉⌊Quote detail with "Accept and pay"⌉[

Quote detail with “Accept and pay”

[⌊Admin dashboard: counters, filters, search⌉⌊Admin dashboard: counters, filters,
search⌉[

Admin dashboard: counters, filters, search

[⌊Admin quote detail: line and global discounts, expiry, status⌉⌊Admin quote detail:
line and global discounts, expiry, status⌉[

Admin quote detail: line and global discounts, expiry, status

[⌊Settings: cart button style editor with live preview⌉⌊Settings: cart button style
editor with live preview⌉[

Settings: cart button style editor with live preview

## Installation

 1. Upload the plugin to `/wp-content/plugins/` or install it from the Plugins screen.
 2. Activate it. WooCommerce must be active.
 3. Go to **WooCommerce  Quotes  Settings**: minimum cart total, who can request, company
    details, PDF logo, buttons.

## FAQ

### Does it hide prices or replace “Add to cart”?

No. NuxWP Devis keeps your shop working normally. Customers fill their cart and 
request a quote from the cart page. (Product-page buttons and the out-of-stock quote
mode are part of the Pro add-on.)

### Can guests request a quote?

Quotes are tied to a customer account so they can be followed up, accepted and paid.
Guests are invited to log in or register.

### Does it work with the Cart block?

Yes. The button is rendered inside the block cart’s totals area. The `[devisqr_button]`
shortcode remains available to place it anywhere else.

### How is the minimum cart total computed?

On the products in the cart at catalog price, including tax — shipping, fees and
coupons are not part of a quote.

### What happens when the customer pays an accepted quote?

The quote lines are loaded into an empty cart at the negotiated prices (all or nothing:
if a product is no longer available in the requested quantity, the customer is asked
to contact you). The cart is locked; the order is placed normally; the quote becomes
_Ordered_ once the order is processing / completed / on hold (filterable). A failed
or abandoned payment leaves the quote payable.

### Which languages does the PDF support?

The built-in PDF generator supports Latin-script languages (English, French, Spanish,
German, Italian, Portuguese…). The interface, e-mails and admin are fully translatable;
English and French are included.

### Does it work with HPOS?

Yes. The plugin declares compatibility with WooCommerce High-Performance Order Storage.

### Where are the PDFs stored?

PDFs are stored in `wp-content/uploads/devisqr-quotes/` with unguessable file names,
protected by `.htaccess` (Apache) and only served to the quote owner or shop managers
through a nonce-protected link. On Nginx, add `location ~* /uploads/devisqr-quotes/{
deny all; }` to your server block.

### E-mails are not arriving

The plugin uses `wp_mail()` like WooCommerce. If your site has no SMTP configured,
install an SMTP plugin; the “Sender e-mail” setting must be an address your server
is allowed to send from.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“NuxWP Devis – Quote Requests for WooCommerce” is open source software. The following
people have contributed to this plugin.

Contributors

 *   [ Kais Chrouda ](https://profiles.wordpress.org/kais1977/)

[Translate “NuxWP Devis – Quote Requests for WooCommerce” into your language.](https://translate.wordpress.org/projects/wp-plugins/nuxwp-devis)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/nuxwp-devis/), check
out the [SVN repository](https://plugins.svn.wordpress.org/nuxwp-devis/), or subscribe
to the [development log](https://plugins.trac.wordpress.org/log/nuxwp-devis/) by
[RSS](https://plugins.trac.wordpress.org/log/nuxwp-devis/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.5.2

 * Removed the free-form “Custom CSS” field: the cart button is styled through the
   form fields of the style editor (colours, size, outline, icon).

#### 1.5.1

 * Renamed to NuxWP Devis. The cart button style editor is part of the free plugin.
   Translations now come from translate.wordpress.org.

#### 1.5.0

 * First public release on WordPress.org.
 * Cart  quote request flow (classic cart and Cart block), minimum cart total, allowed
   roles, validity and automatic expiry, optional customer message.
 * PDF quote (zero dependency) with your logo and company details; “My quotes” account
   tab; accept & pay in one click.
 * Admin: quotes list with search and statuses, line editing and global discount,
   pending badge, EN / FR switch per user.
 * E-mails: one sober responsive template, every sentence editable from Settings
   Texts & translations, “Send me a test e-mail” button.
 * Logo: PNG, JPEG, WebP, GIF or AVIF (converted to PNG for the PDF and e-mails).

## Meta

 *  Version **1.5.2**
 *  Last updated **8 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.2 or higher **
 *  Tested up to **7.1.4**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [b2b](https://wordpress.org/plugins/tags/b2b/)[quote](https://wordpress.org/plugins/tags/quote/)
   [request a quote](https://wordpress.org/plugins/tags/request-a-quote/)[woocommerce](https://wordpress.org/plugins/tags/woocommerce/)
 *  [Advanced View](https://wordpress.org/plugins/nuxwp-devis/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/nuxwp-devis/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/nuxwp-devis/reviews/)

## Contributors

 *   [ Kais Chrouda ](https://profiles.wordpress.org/kais1977/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/nuxwp-devis/)