Many businesses need product displays without checkout functionality. With WooCommerce catalog mode, you can remove purchase options while preserving all your product data.
For example, you could be planning a 2-week vacation and need to disable purchasing on your WooCommerce store. If you just remove the cart widget, the checkout pages still load, prices display everywhere, and the cart icon isn’t going anywhere. That’s why you need catalog mode.
WooCommerce operates as 2 independent layers. You’ve got the product management system, which handles categories, descriptions, images, and SEO. Then the commerce layer, which manages cart, checkout, and payments on top of that foundation.
This guide covers store-wide catalog mode, partial catalog setups, and how to transform “Add to Cart” buttons into lead-generation tools that actually convert.
What catalog mode is & why use it
Catalog mode disables purchasing functionality in WooCommerce, turning your online store into a product showcase without cart, checkout, or price display options.
Your SKUs, descriptions, categories, and images stay exactly where they are. Think of catalog mode as temporarily unplugging the cash register while keeping the showroom lights on.
Why use catalog mode?
For seasonal business management
Seasonal products benefit from catalog mode because it maintains your online presence year-round while controlling when sales actually occur.
Example: A pool supply store switches to catalog mode every October – products stay indexed for spring SEO, but customers see “Pre-order for 2026 season” instead of cart buttons.
This approach keeps your Google rankings warm during off-seasons without confusing customers who might expect immediate shipping in December.
For customer segmentation
Showing catalog mode to specific customer groups lets you display products to everyone while controlling who can actually purchase.
Example: A tile importer displays product galleries on their storefront to everyone, but only logged-in contractors can view prices and place orders; retail visitors are shown “Visit Our Showroom” buttons instead.
This helps you maximize product visibility for SEO while protecting wholesale pricing from end consumers.
For business continuity during disruptions
Temporary catalog mode serves as a “closed sign” that maintains your SEO rankings and customer engagement while you handle operational challenges like:
- Inventory shortages
- Staff vacations
- Supply chain delays
- System maintenance
- Seasonal closures
For marketing and lead generation
Catalog mode can also be used for lead generation often used during pre-sale:
- Build email lists through “notify when available” forms
- Create anticipation for seasonal products
- Test market demand without inventory commitment
- Generate backlinks and social shares for pre-launch catalogs
Did you know? Hidden prices don’t hurt SEO – Google values comprehensive product information over transactional elements. Pre-launch catalogs often generate more social shares than live stores because people love being “first to see” new products.
When to use code or a catalog mode plugin
Catalog mode cannot be implemented natively in WooCommerce. You need either code or plugins to achieve this functionality. The choice depends on your technical comfort level and catalog complexity needs.
Use code if you need it temporarily and you’re comfortable adding code to your functions.php file.
Code snippets work perfectly for simple scenarios, like disabling all purchases during vacation, hiding cart buttons store-wide, or removing checkout access completely.
Use catalog mode plugins when you need complex management capabilities or you’re not comfortable with adding code to your website.
Plugins shine when you need granular control or when you’re simply not at ease with code. Imagine a port closure suddenly affects your imports. You need to disable purchases for 500 products from Region A while keeping Region B sellable. With code snippets, you’d spend hours writing conditional logic for specific categories and testing each change. Dedicated plugins, however, handle this in minutes through their central dashboards.
TL;DR: Code handles “all products on/off” beautifully. Plugins excel at “some products, some users, some timeframes.”
If you’re implementing a simple store-wide catalog mode temporarily, start with code. If you need ongoing management or selective controls, invest in a plugin.
How do I enable catalog mode in WooCommerce with code for free?
Let’s start by taking a look at how to enable catalog code with code snippets.
The approach: Convert WooCommerce to catalog mode by adding remove_action snippets to your functions.php file.
Child theme recommendation
Create a child theme first to protect your changes from theme updates.
When your main theme updates, it overwrites the functions.php file – erasing your catalog mode code. A child theme preserves your customizations permanently.
Quick child theme setup:
- Create a new folder in /wp-content/themes/ named your-theme-child.
- Add a style.css file with theme header information.
- Add a functions.php file for your custom code.
Implementation steps
Where to add the code: Navigate to Appearance → Theme Editor → functions.php (in your child theme) or create a custom plugin file.
Safety first: Always back up your site before adding custom code. Test on a staging environment if possible.
The code below removes all “Add to Cart” buttons and purchase functionality:
remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_add_to_cart', 10 );
remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_add_to_cart', 10 );
add_filter( 'woocommerce_loop_add_to_cart_link', '__return_empty_string', 999 );
add_filter( 'woocommerce_is_purchasable', '__return_false', 999 );
add_filter( 'woocommerce_get_price_html', '__return_empty_string', 999 );
Code language: JavaScript (javascript)
This code will:
- Hide all “Add to Cart” buttons on shop pages, category pages, and product pages.
- Remove purchase functionality completely.
- Optionally hide prices.
Using YITH WooCommerce Catalog Mode for advanced catalog management
If you’re not comfortable with code, or you prefer the additional options that a plugin easily provides, then this section is for you. Let’s take a look at how YITH WooCommerce Catalog Mode allows you to turn your online shop into a catalog by removing “Add to Cart” buttons and hiding checkout access.
Key features
Free version capabilities:
- Hide “Add to Cart” buttons globally or on specific pages.
- Remove access to cart and checkout pages.
- Basic catalog functionality for all users.
Premium additions ($79.99/year):
- Apply catalog mode to guest users only or specific countries – perfect for businesses with different sales policies by region or user.
- Custom buttons and labels to replace purchase elements (e.g. “Pre-Order Today!”, “Request a Quote”, “Inquire for Prices”).
- Integration with popular form builders (Contact Form 7, Gravity Forms, Ninja Forms) – this allows you to capture leads directly from your product pages.
Free vs premium comparison
Feature | Free | Premium |
---|---|---|
Hide cart buttons | ✅ | ✅ |
Remove checkout access | ✅ | ✅ |
Hide prices | ❌ | ✅ |
Role-based control | ❌ | ✅ |
Custom replacement buttons | ❌ | ✅ |
Inquiry forms | ❌ | ✅ |
Country restrictions | ❌ | ✅ |
Now, let’s move on to how to actually set it up.
Setting up YITH WooCommerce Catalog Mode
Free version setup (all products):
- Install the plugin from Plugins → Add New → Search “YITH WooCommerce Catalog Mode.”
- Navigate to YITH → Catalog Mode in your WordPress dashboard.
- Enable “Disable shop” toggle.
- Save changes.
Premium version setup:
- Go to YITH → Catalog Mode → Settings.
- Configure user rules under “Apply to” section (all users, guest users only, or logged-in users).
- Set up custom buttons in “Button & Label” tab.
- Enable inquiry forms in “Inquiry Form” section.
- Configure country restrictions if needed.
Advanced targeting:
Catalog mode works beyond store-wide settings. You can apply it to specific categories or individual products with different call-to-action buttons.
Category-level: Assign catalog mode to entire product categories (e.g. “Wholesale Only” category shows “Request Trade Quote”).
Product-level: Set individual products as catalog-only with custom messaging (e.g. “Available In-Store Only”).
Setting up partial catalog mode
If you want to hide prices only for some users, then you need partial catalog mode. This setting allows different visibility rules for different users and products. Here are the different scenarios:
Role-based visibility
Common B2B scenario: Public visitors see “Request Quote”, while logged-in wholesalers see prices and can order.
To do that, you just need to separate the users depending on whether they’re logged into the system or not. In the code snippets, we’ll be using is_user_logged_in()
and user capabilities. This checks if users are logged in.
Non-logged-in users see a “Request Quote” button leading to your contact page, along with a sticky login button in the top right corner for wholesalers. Let’s take a closer look at the different options.
Hide prices for non-logged-in users
add_filter('woocommerce_get_price_html', 'hide_prices_for_guests', 10, 2);
function hide_prices_for_guests($price, $product) {
if (!is_user_logged_in()) {
return '';
}
return $price;
}
Code language: PHP (php)
Remove “Add to Cart” button for non-logged-in users
“Add to Cart” buttons can be removed from specific pages of your choice. Just add the code below, and then you can add code from the subsequent bullet points:
add_action('init', 'remove_add_to_cart_for_guests');
function remove_add_to_cart_for_guests() {
if (!is_user_logged_in()) {
Code language: JavaScript (javascript)
- Removal from shop/archive pages:
remove_action('woocommerce_after_shop_loop_item',
'woocommerce_template_loop_add_to_cart', 10);
Code language: JavaScript (javascript)
- Removal from single product pages:
remove_action('woocommerce_single_product_summary',
'woocommerce_template_single_add_to_cart', 30);
Code language: JavaScript (javascript)
Additional removal for stubborn themes
remove_action('woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 5);
remove_action('woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 15);
remove_action('woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 20);
}
}
Code language: JavaScript (javascript)
Hide “Add to Cart” with CSS as backup
add_action('wp_head', 'hide_add_to_cart_css_for_guests');
function hide_add_to_cart_css_for_guests() {
if (!is_user_logged_in()) {
?>
<style>
.add_to_cart_button,
.single_add_to_cart_button,
.ajax_add_to_cart,
.product_type_simple,
.button.product_type_simple,
.single-product .cart,
.woocommerce-variation-add-to-cart {
display: none !important;
}
</style>
<?php
}
}
Code language: JavaScript (javascript)
Filter out “Add to Cart” button completely
add_filter('woocommerce_loop_add_to_cart_link', 'remove_add_to_cart_link_for_guests', 10);
function remove_add_to_cart_link_for_guests($button) {
if (!is_user_logged_in()) {
return '';
}
return $button;
}
Code language: PHP (php)
Add “Request Quote” button on single product pages
add_action('woocommerce_single_product_summary', 'add_request_quote_button', 30);
function add_request_quote_button() {
if (!is_user_logged_in()) {
echo '<a href="/contact-us/" class="button request-quote-btn">Request Quote</a>';
}
}
Code language: PHP (php)
Add “Request Quote” button on shop/archive pages
add_action('woocommerce_after_shop_loop_item', 'add_request_quote_button_loop', 10);
function add_request_quote_button_loop() {
if (!is_user_logged_in()) {
echo '<a href="/contact-us/" class="button request-quote-btn">Request Quote</a>';
}
}
Code language: PHP (php)
Hide cart and checkout pages for non-logged-in users
add_action('template_redirect', 'restrict_cart_checkout_for_guests');
function restrict_cart_checkout_for_guests() {
if (!is_user_logged_in() && (is_cart() || is_checkout())) {
wp_redirect(wp_login_url());
exit;
}
}
Code language: PHP (php)
Remove cart widget/menu items for non-logged-in users
add_filter('wp_nav_menu_items', 'remove_cart_menu_for_guests', 10, 2);
function remove_cart_menu_for_guests($items, $args) {
if (!is_user_logged_in()) {
// Remove cart menu items (adjust class names as needed for your theme)
$items = preg_replace('/<li[^>]*class="[^"]*cart[^"]*"[^>]*>.*?<\/li>/i', '', $items);
}
return $items;
}
Code language: PHP (php)
Optional: Hide cart icon in header for non-logged-in users
add_action('wp_head', 'hide_cart_for_guests');
function hide_cart_for_guests() {
if (!is_user_logged_in()) {
?>
<style>
.cart-contents, .woocommerce-cart-link, .cart-icon, .header-cart {
display: none !important;
}
</style>
<?php
}
}
Code language: JavaScript (javascript)
Implementation tips:
- Use product categories for easier management – apply rules to entire categories rather than individual products.
- Add custom badges explaining availability – clear visual indicators reduce confusion.
- Clear messaging prevents support tickets – explain why products behave differently.
💡Pro tip: Managing hundreds of mixed-visibility products can become challenging. Plan your long-term maintenance needs when choosing between product-level and category-level rules. Very often, category-based rules scale better than individual product settings for large inventories.
Okay, but what about shipping and tax setups for catalog mode? No need to think about it! Shipping and tax configurations disappear automatically when the cart is disabled. You can skip the entire WooCommerce setup wizard for stores, addresses, and payment methods.
Troubleshooting common catalog mode issues
Even after implementing catalog mode, some purchase elements might linger. Here are the most common issues and their fixes.
Cart widget still showing in header/sidebar
Quick CSS fix: Add .widget_shopping_cart { display: none !important; }
to your theme’s Additional CSS.
Better solution: Navigate to Appearance → Widgets, then remove the Shopping Cart widget from all sidebar areas.
Theme-specific issues: Some themes hardcode cart icons. Check Theme Customizer → Header options for cart display settings.
Direct URL access still works
Visitors typing /cart or /checkout can still reach these pages.
Add this redirect to your catalog mode code:
add_action( 'template_redirect', function() {
if( is_cart() || is_checkout() ) {
wp_redirect( home_url('/shop/') );
exit;
}
});
Code language: PHP (php)
Alternative: Use redirection plugins for visual rule management without coding.
Prices still showing in search results/shop pages
Quick fix: Add .price { display: none !important; }
to your CSS.
Selective hiding: Use .product .price { display: none; }
to target only product listings.
Cache issues: Some themes cache price displays – clear all caches after making changes.
“View Cart” message appears after clicking catalog items
Disable AJAX add to cart: Go to WooCommerce → Settings → Products, uncheck “Enable AJAX add to cart buttons.”
Remove messages entirely: Add add_filter( 'woocommerce_add_to_cart_message', '__return_false' );
to your functions.php.
Mobile menu still shows cart icon
Check your theme’s mobile menu settings separately – desktop and mobile menus often have different configurations.
Testing checklist before going live
Before launching your catalog mode store, run through this essential checklist to catch any lingering purchase elements:
✅ Test all product types in incognito mode
✅ Check critical URLs directly
✅ Verify forms deliver to the correct email
✅ Clear all caches completely
✅ Test on actual mobile devices
💡Pro tip: Have someone unfamiliar with your site browse it. Fresh eyes catch issues you might miss.
Set up your WooCommerce catalog store today
Catalog mode controls visitor actions without breaking your store. You’re simply toggling visibility of the commerce layer while keeping all product data intact. Every method is completely reversible. Your product data stays safe while you control the shopping experience.
Whether you choose free code snippets for temporary catalog mode or premium plugins for complex role-based rules, you’re not committing to a permanent change. Switch back to full e-commerce functionality anytime without losing SKUs, descriptions, or categories.
For store owners wanting to improve and optimize their product pages, take a look at Advanced Product Fields for WooCommerce. This plugin helps you turn catalog pages into interactive specification forms and quote request systems, converting browsers into leads.