TopSyde
Get your free site auditStart Risk-Free

WooCommerce Product Catalog No Checkout: Quote Guide

Turn WooCommerce into a product catalog with quote requests instead of checkout. Plugins, code, and B2B workflows explained for 2026.

Elena Marchetti

Elena Marchetti

Content & SEO Strategist

··12 min read

Last updated: August 7, 2026

WooCommerce product catalog page with a Request a Quote button instead of Add to Cart

WooCommerce can function as a full product catalog — displaying products, pricing, and variants — without exposing cart or checkout pages. This is the standard setup for B2B manufacturers, wholesalers, and service businesses that sell through quotes, sales reps, or negotiated contracts rather than self-serve transactions.

Why Use WooCommerce Without a Checkout?

The checkout-free use case is more common than most developers expect. WooCommerce's product management, variant system, taxonomy, and filtering are genuinely excellent — arguably better than any standalone catalog software at the same price point (free). The payment infrastructure is the part you want to bypass.

Typical scenarios:

  • B2B manufacturers with MOQ requirements and negotiated pricing who need reps to close deals
  • Wholesale distributors whose pricing tiers live in an ERP (like SAP Business One — see the WooCommerce SAP Business One integration guide for how that sync works)
  • Custom product businesses where price depends on configuration — a natural pairing with WooCommerce product configurators
  • Service providers listing service packages but requiring a consultation before purchase
  • Retailers in regulated industries (firearms, pharmaceuticals, age-restricted goods) where online checkout creates compliance risk

The implementation problem is that WooCommerce is built around purchasing. Disabling cart/checkout isn't a single setting — it's a combination of suppressing UI elements, rerouting user actions, and ensuring cart/checkout URLs return 404 or redirect.

How to Disable Cart and Checkout in WooCommerce

The cleanest approach for most sites is a dedicated catalog mode plugin. These handle the edge cases — guest users hitting /cart directly, "Add to Cart" buttons in widget areas, product loop buttons — that manual CSS hides won't catch.

YITH WooCommerce Catalog Mode The most widely deployed option. Free tier disables Add to Cart in product loops and single product pages. Premium ($89.99/year at time of writing) adds per-category and per-user-role controls, custom button replacement, and price hiding by role. The role-based controls are critical for sites that want checkout available for specific customer groups (e.g., direct consumers) while showing catalog-only to wholesale accounts.

WooCommerce Catalog Mode by WPFactory Free, lightweight, no upsell. Replaces Add to Cart with a configurable text button or removes it entirely. Does not handle price hiding or quote workflows — you'll need additional plugins for those. Good choice if you're building a custom integration and want minimal plugin surface area.

Barn2's WooCommerce Product Table Not strictly a catalog mode plugin, but widely used for B2B catalogs because it renders products in a sortable table with bulk-quote functionality built in. If your customers need to request quotes on multiple SKUs simultaneously, this is worth the $149/year.

Method 2: Code-Level Catalog Mode

If you're already maintaining a custom plugin or child theme, a few targeted filters handle the core suppression:

// Remove Add to Cart button globally
add_filter( 'woocommerce_is_purchasable', '__return_false' );

// Remove price display (optional — separate decision)
add_filter( 'woocommerce_get_price_html', '__return_empty_string' );

// Redirect cart and checkout to home page
add_action( 'template_redirect', function() {
    if ( is_cart() || is_checkout() ) {
        wp_redirect( home_url() );
        exit;
    }
});

// Remove cart menu item from nav
add_filter( 'wp_nav_menu_items', function( $items, $args ) {
    // Remove cart icon from header — implementation depends on theme
    return $items;
}, 10, 2 );

The woocommerce_is_purchasable filter returning false is the key hook — it propagates through WooCommerce's entire purchasing flow, suppressing Add to Cart in product loops, single product pages, and related products sections simultaneously.

Caution: __return_false applied globally means no products are purchasable for anyone. If you need role-based exceptions, replace with a conditional:

add_filter( 'woocommerce_is_purchasable', function( $purchasable, $product ) {
    if ( current_user_can( 'retail_customer' ) ) {
        return $purchasable; // original value for retail
    }
    return false; // catalog mode for everyone else
}, 10, 2 );

Always test these changes on a staging environment before deploying. If you're on TopSyde managed hosting, push-to-staging is a single click from the dashboard.

Adding Request-a-Quote Functionality

Disabling checkout creates a dead end unless you replace the purchase CTA with a quote workflow. The goal is capturing lead intent at the point where purchase intent is highest — the product page.

YITH WooCommerce Request a Quote

The most feature-complete free option. Adds a "Add to Quote" button that builds a quote list (similar to a cart), then submits the list as a structured email to the admin. The quote list page is a separate URL from /cart, so your cart-redirect code won't affect it.

Premium version ($139.99/year) adds:

  • Customer-facing quote management (view status, accept/decline)
  • PDF quote generation
  • Expiry dates on quotes
  • WooCommerce order creation directly from an accepted quote (useful if some customers eventually convert to checkout)

Quotish / Request a Quote for WooCommerce (by WebToffee)

Solid alternative with a cleaner UI for the quote list page. Allows customers to specify quantities and add notes per line item — important for B2B where a single SKU might need different spec notes per row.

Custom Quote Form via Contact Form Plugins

For simpler setups, removing Add to Cart and replacing it with a shortcode linking to a pre-filled contact form is completely viable. The product name and SKU can be passed as URL parameters to pre-populate form fields:

// On single product page, output a link instead of Add to Cart
add_action( 'woocommerce_single_product_summary', function() {
    global $product;
    $quote_url = add_query_arg([
        'product' => $product->get_name(),
        'sku'     => $product->get_sku(),
    ], '/contact/');
    echo '<a href="' . esc_url( $quote_url ) . '" class="button alt">Request a Quote</a>';
}, 30 );

This approach keeps plugin count low — a concern if you're already managing WooCommerce extension overhead. The WooCommerce without Jetpack guide covers the broader philosophy of keeping your plugin stack minimal and targeted.

WhatsApp and Email CTA Integrations

For B2B businesses in markets where WhatsApp is the primary business communication channel (Southeast Asia, Middle East, Latin America), a WhatsApp CTA on the product page converts better than a quote form.

WhatsApp Button Implementation

add_action( 'woocommerce_single_product_summary', function() {
    global $product;
    $phone   = '15551234567'; // Your business WhatsApp number, no +
    $message = rawurlencode( 'Hi, I\'d like a quote for: ' . $product->get_name() . ' (SKU: ' . $product->get_sku() . ')' );
    $url     = "https://wa.me/{$phone}?text={$message}";
    echo '<a href="' . esc_url( $url ) . '" class="button whatsapp-cta" target="_blank" rel="noopener">WhatsApp Us for a Quote</a>';
}, 35 );

This opens WhatsApp (web or app) with the product name and SKU pre-populated. No plugin required, no form submission to manage, and the conversation happens in a channel your sales team already uses.

Plugin option: "WhatsApp Chat" by Jomer Sanchez (free, 100k+ installs) handles the floating button and mobile/desktop routing without custom code if you prefer a UI-based approach.

Plugin Comparison Table

PluginFree TierPrice (Pro)Quote ListRole-BasedPDF Quotes
YITH Catalog Mode + QuoteYes$89.99 + $139.99/yrYesYes (Pro)Yes (Pro)
WPFactory Catalog ModeYesFreeNoNoNo
WebToffee Request a QuoteYes$79/yrYesYes (Pro)Yes (Pro)
Barn2 Product TableNo$149/yrYes (bulk)NoNo
WhatsApp Chat (Jomer)YesFreeNoNoNo

Hiding Prices: A Separate Decision

Catalog mode (hiding cart/checkout) and price hiding are independent concerns that often get conflated. You can:

  1. Show prices, hide checkout — standard catalog mode
  2. Hide prices AND hide checkout — common for wholesale ("login to see pricing")
  3. Show prices to logged-in users, hide to guests — requires role-based filter

For option 2 and 3, the woocommerce_get_price_html filter combined with is_user_logged_in() handles it cleanly:

add_filter( 'woocommerce_get_price_html', function( $price, $product ) {
    if ( ! is_user_logged_in() ) {
        return '<a href="' . wp_login_url( get_permalink() ) . '">Login to see pricing</a>';
    }
    return $price;
}, 10, 2 );

B2B wholesale catalogs frequently combine this with WooCommerce's built-in "Wholesale Customer" role (or a plugin like Wholesale Suite) so pricing tiers are user-specific.

This kind of role-based conditional is also where checkout optimization becomes relevant — if some customer segments do proceed to checkout, the experience still needs to work. The WooCommerce checkout optimization guide covers the UX side of that.

B2B-Specific Considerations

Variable Products and Attribute Display

In catalog mode, you still want customers to be able to select variants (color, size, material) to understand what they're quoting. Test that your attribute selectors remain functional after removing Add to Cart — some themes tie the variant selection JS to the add-to-cart button state and will disable dropdowns when the button is absent.

Fix: ensure the variation form is still rendered even without the submit button. Most quote plugins handle this, but custom implementations need to explicitly output woocommerce_variable_add_to_cart() and then suppress just the button.

SEO Implications

Catalog-mode products remain fully indexable. Product pages, category pages, and breadcrumbs all function normally. However, removing structured data related to offers (pricing markup) will reduce rich result eligibility — weigh that against price confidentiality requirements.

According to Baymard Institute research, B2B buyers spend an average of 12+ page views per session during product research phases (2024). A clean catalog experience that loads fast directly supports this behavior.

According to Statista, over 70% of B2B buyers prefer self-service product research before engaging a sales rep (2024). A fast, well-structured catalog is your primary sales tool — which is exactly why performance on the hosting layer matters. WooCommerce stores on managed hosting consistently outperform equivalent stores on shared infrastructure, especially under catalog browsing loads where many product images and filter queries run simultaneously.

Order Minimum Logic

If your quote workflow eventually feeds into an order, HPOS (High-Performance Order Storage) handles large order volumes significantly better than the legacy posts-based approach. If you're scaling a quote-to-order workflow, the WooCommerce HPOS migration guide is worth reading before volume becomes a bottleneck.

Testing Your Catalog Mode Implementation

Before going live, verify each of these manually and in an incognito session (unauthenticated user):

  • /cart URL redirects or returns 404
  • /checkout URL redirects or returns 404
  • "Add to Cart" absent from product loops (shop page, category pages, search results)
  • "Add to Cart" absent from single product pages
  • "Add to Cart" absent from related products, upsells, cross-sells
  • Cart widget/icon in header is hidden or shows 0 with no link
  • Quote CTA button visible and functional on single product pages
  • Variable product attribute selectors still functional
  • Price display matches intended behavior (shown/hidden by role)
  • WhatsApp/email CTA links pre-populate correctly with product data
  • Structured data (Schema.org Product) validates in Google's Rich Results Test

Run this checklist on both desktop and mobile — button placement and visibility can differ significantly between breakpoints.


Frequently Asked Questions

Can I enable checkout for some products but not others?

Yes. Instead of applying woocommerce_is_purchasable globally, apply it conditionally based on product ID, category, or custom attribute. WooCommerce also has a native "Virtual" product type that you can repurpose, though the cleaner approach is a custom product attribute like _catalog_only and filtering on that meta value. YITH Catalog Mode Premium handles per-category toggles through the admin UI without custom code.

Will disabling checkout break WooCommerce analytics or reporting?

Disabling cart and checkout removes those events from the default WooCommerce analytics pipeline, but product views, search queries, and category browsing still generate data. If you're also using Google Analytics 4, ecommerce events for add_to_cart and purchase will simply stop firing — which is expected. Quote submissions become your conversion event; configure GA4 to track form submissions or WhatsApp link clicks as goals instead.

Do request-a-quote plugins work with WooCommerce subscriptions or variable products?

Most quote plugins treat variable products correctly — the customer selects a variation, then adds it to the quote list with that specific variant's data (SKU, attributes). Subscription products are a different case: quote-to-subscription workflows require custom handling because WooCommerce Subscriptions' payment setup runs through checkout. In practice, most subscription use cases don't pair well with catalog-only mode; if you need recurring billing, you need checkout for at least the subscription initialization.

What's the performance impact of adding a quote plugin?

Minimal if you choose a focused plugin. The risk is plugins that load scripts on every page rather than only on product pages. Check network requests on non-product pages after installing — any quote plugin loading its JS on the blog or home page is adding unnecessary overhead. WPFactory's free catalog mode plugin is notably lean; YITH's loads slightly heavier but well within acceptable ranges on properly configured hosting.

How do I handle customers who want to order directly after receiving a quote?

YITH's premium quote plugin can convert an accepted quote directly into a WooCommerce order, bypassing the standard cart/checkout flow but still creating a

Elena Marchetti
Elena Marchetti

Content & SEO Strategist

7+ years SEO & content strategy, Google Analytics certified

Elena drives content strategy and SEO at TopSyde, helping clients maximize organic visibility and AI search presence. She combines technical WordPress knowledge with data-driven content optimization.

Related Articles

View all →

Managed WooCommerce

Your store, off your plate.

Hosting tuned for checkout speed, updates tested before they ship, daily security scans, and a senior developer on call when an order breaks. Flat $89/mo — everything included.

Flat $89/mo per site · Free migration · 30-day money-back guarantee