WooCommerce: How to Enable Catalog Mode?

One of the most common WooCommerce questions is: can I use WooCommerce to build a catalog of products (without add to cart, price… basically a product gallery)? Using WooCommerce for this case scenario is indeed very helpful – you can make the most of all the inbuilt features such as single product gallery and carousel, image zoom, product description tabs, attributes, categories, tags and related products. Basically a much better version than a standard image gallery.

Another question might be: can I disable the WooCommerce add to cart / cart / checkout functionality until the time I am able to sell my products? This is another common scenario that many WooCommerce store owners require.

Besides, certain products in your WooCommerce website might be for sale and others might not. In this case, you’d want to disable the add to cart functionality from specific categories or products.

Finally, you might want to restrict the cart / checkout functions to logged in, registered users only. This is if you run a wholesale business for example, and wish to hide your prices to the public.

Either way, when the “Add to Cart” button gets hidden, a contact form might be required – this is what I call a “Product Inquiry” form.

Good news is there are snippets and plugins that can make your life easier, your admin time more efficient and your product management simpler. And today we’re taking a look at the best options.

Solution 1: Code Snippets

If you feel adventurous with coding, there are simple PHP snippets that can achieve almost everything. And here on Business Bloomer there are many, such as this: “WooCommerce: Hide Price & Add to Cart for Logged Out Users“.

The thinking behind this is very simple – we check if the user is logged in and if not, we tell WooCommerce to “remove” add to cart buttons and prices everywhere. This does not hide the Cart and Checkout pages, it does apply to all products and it might need to be customized if your theme is overriding WooCommerce with its own functions.

A quick version of the original snippet (which can be found at this link together with an additional feature – a login message), is the following:

* @snippet     Hide Price & Add to Cart for Logged Out Users
* @how-to      Get CustomizeWoo.com FREE
* @author      Rodolfo Melogli
* @testedwith  WooCommerce 4.1
add_action( 'init', 'bbloomer_hide_price_add_cart_not_logged_in' );
function bbloomer_hide_price_add_cart_not_logged_in() {
   if ( ! is_user_logged_in() ) {
      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_single_product_summary', 'woocommerce_template_single_price', 10 );
      remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10 );

The “is_user_logged_in” PHP function is very helpful and in this case some code is executed when the user is not.

This is a great start, but unless you know PHP you probably won’t be able to customize it for your specific objectives. So, let’s take a look at the most reliable plugins that can achieve this… and much more – without having to ever get close to coding.

Solution 2: “YITH WooCommerce Catalog Mode” (Free)

The great YITH team has a plugin for this too. We already talked about their Bulk Product Edit, Affiliate Program, My Account Customization, Wishlist, Multi-Vendor, Gift Cards, Request a Quote plugins and this won’t be the last. They develop all the most popular WooCommerce plugins, have a great support team and most of their plugins comes with a free version, which is a good way to test the product without having to commit to an online purchase.

YITH WooCommerce Catalog Mode” is a free plugin available on WordPress.org. With this version you can already achieve a lot, such as hiding the Add to Cart everywhere on the site and disable the Cart and Checkout pages. Not a bad start.

In order to get more features, however, YITH has a premium version of the plugin, which we’re going to cover in the next section.

Solution 3: “YITH WooCommerce Catalog Mode” (Premium)

Once you’ve given the YITH free version a go, you might like this advanced plugin and its awesome features.

On top of the functionalities of the free version, YITH WooCommerce Catalog Mode premium also features:

  • an “exclusion list”, so that you can apply the catalog mode to a specific list only
  • a way to hide prices (as well as Add to Cart buttons) to all users or non logged in users
  • a way to enter a message instead of the price e.g. “POA” or “Register to see prices”
  • an “inquiry form“, compatible with Contact Form 7 or Gravity Forms, so that users can request information, quotes or prices via a direct form on the product page
  • and other features (I also recommend to look at the Q&A tab on the plugin sales page to see custom scenarios and specific queries)

Here are a few screenshots of the plugin frontend and backend (click on any image to open lightbox):

Solution 4: “WooCommerce Catalog Visibility Options” (Premium)

There is also a premium plugin available on the official WooCommerce.com marketplace. In regard to its features, WooCommerce Catalog Visibility Options gives you the ability to:

  • hide prices for all or only registered users
  • disable the cart/checkout pages
  • define an alternative price message when prices are disabled
  • define an alternative add-to-cart button when disabled

It seems the features are less than the ones provided by YITH, but once again always ask the pre-sales support if you have specific questions, integrations, doubts and idea. Not all plugins suit everyone ๐Ÿ™‚

Related content

  • WooCommerce: Custom Add to Cart URLs – The Ultimate Guide
    In WooCommerce you can add a product to the cart via a custom link. You just need to use the “add-to-cart” URL parameter followed by the product ID. This tutorial will show you how to create custom URLs to add simple, variable and grouped products to the cart – as well as defining the add […]
  • WooCommerce: Disable Variable Product Price Range $$$-$$$
    You may want to disable the WooCommerce variable product price range which usually looks like $100-$999 when variations have different prices (min $100 and max $999 in this case). With this snippet you will be able to hide the highest price, and add a “From: ” prefix in front of the minimum price. At the […]
  • WooCommerce: Hide Price & Add to Cart for Logged Out Users
    You may want to force users to login in order to see prices and add products to cart. That means you must hide add to cart buttons and prices on the Shop and Single Product pages when a user is logged out. All you need is pasting the following code in your functions.php (please note: […]
  • WooCommerce: Hide Prices on the Shop & Category Pages
    Interesting WooCommerce customization here. A client of mine asked me to hide/remove prices from the shop page and category pages as she wanted to drive more customers to the single product pages (i.e. increasing the click-through rate). As usual, a simple PHP snippet does the trick. I never recommend to use CSS to “hide” prices, […]
  • WooCommerce: Add Prefix / Suffix to Product Prices
    Sometimes you may want to add a prefix or a suffix to your prices. It could be something like “From…”, “Only…”, “…tax free” and so on. The first good news is this is very easy to do with a WooCommerce filter (remember, filters change the value of an existing variable, while actions add content). The […]

Rodolfo Melogli

Business Bloomer Founder

Author, WooCommerce expert and WordCamp speaker, Rodolfo has worked as an independent WooCommerce freelancer since 2011. His goal is to help entrepreneurs and developers overcome their WooCommerce nightmares. Rodolfo loves travelling, chasing tennis & soccer balls and, of course, wood fired oven pizza. Follow @rmelogli

27 thoughts on “WooCommerce: How to Enable Catalog Mode?

  1. Hi Rodolfo, does the snippet work with the latest WooCommerce version? Because I’m having some trouble implementing it. Thank you.

    1. Yep. Try disabling all the rest (plugins, theme) and see if it works

  2. I don’t know what I would do without your site, thanks a ton! ๐Ÿ™‚

  3. hi there, i have a website built on woocommerce but i really can’t put price tags since there are to many factors to consider also there are way much everyday changes , on top of that we sell in bulk and bulk in my jobs means from +10 of an item to a cargo trailer, everything you said was great, except you didn’t mentioned SEO, will it affect SEO if i use catalog mode?

    1. If it works for your users, it won’t affect SEO

  4. You should remove the โ€œWooCommerce Catalogโ€ Plugin option
    it is been update for long time

    1. Done, thanks!

  5. Hi Rodolpho,

    Better too for Storefront to remove sticky :

    remove_action( 'storefront_header', 'storefront_header_cart', 60 );
    remove_action( 'storefront_after_footer', 'storefront_sticky_single_add_to_cart', 999 );
    remove_action( 'storefront_footer', 'storefront_handheld_footer_bar', 999 );

    Thanks for your job

    1. Boom! Great

  6. I tried this in the Storefront Child theme and it didn’t work Rodolfo.

    1. Hi Stef, if you’re referring to solution 1, can you try use “wp” instead of “init” and let me know?

  7. Hi
    I have a custom theme but non of the above catolog plugins not working properly.

    Is there anyway the disable in code?

    Thank you so much

    1. It’s possible. You should test with another theme e.g. 2020 and see if the plugins work, so at least you’ll verify that

  8. Hello Rodolfo,
    what does 60 mean at the end of the line?

    Kind regards

    1. I don’t see any 60 ๐Ÿ˜

  9. It works great with the latest version of woo-commerce. Do you think we could swap the message: Login to see prices
    when we have multilingual shop, in order to have a separate message for each language? Thank you

    1. Hey Manos, thanks for your comment! In order to make a string translatable you have to wrap it in a __() function: https://codex.wordpress.org/I18n_for_WordPress_Developers#Translatable_strings – hope this helps ๐Ÿ™‚

  10. Terrific run-down of the options, Rodolfo! Thanks so much, this was very helpful in helping a client decide which way to go with regards to creating an online catalog of his products without actually having to “sell” on his site!

    1. Thank you!

  11. Hello and thanks for the article. It’s probably also worth mentioning that there are some themes out there that have the ability to disable all sorts of Woocommerce functionality. For example, I came here looking for a way to cleanly ‘catalog mode’ my store, but shortly after reading this I found that the free theme I’m using, OceanWP, has options to disable the add to cart buttons (as well as a host of other items). Cheers and thanks again.

    1. Good to know Graeme!

  12. Hi Rodolfo,
    Thanks for such a great article on Catalog Mode. I belong to ELEX team and I strongly feel our Catalog Mode plugin should be part of this list.
    The plugin’s features include,
    – Catalog Mode with Request a Quote feature.
    – Advanced Role-Based Pricing which allows to set per-product level role-based price.
    – Role-based price for Variable products.
    – Catalog Mode based on user roles.
    and many more enhanced features. The complete set of feature are explained on our product page -> https://elextensions.com/plugin/woocommerce-catalog-mode-wholesale-role-based-pricing/

    1. Thanks Vijay ๐Ÿ™‚

      1. I use the free version of ELEX plugin and it works great to hide prices and replace Add to cart button for “Product inquiry” link.

  13. For catalog mode in Storefront it is also good to remove cart from header ๐Ÿ™‚ :

    add_action( 'storefront_header', 'storefront_header_cart', 60 );
    function storefront_header_cart() {
    echo NULL;


    1. Good stuff ลukasz, but that’s not ideal. I’d rather use this:

      remove_action( 'storefront_header', 'storefront_header_cart', 60 );
Leave a Reply

Your email address will not be published. Required fields are marked *