When talking about UX, or for very specific WooCommerce shops, you might need to “communicate” to the user a product is already in the Cart before re-adding it or increasing its quantity from the Shop/Category/Loop and Single Product pages.
The “Add to Cart” button label comes with a filter (actually 2 filters, one for the Single Product page and another for the other pages such as Shop), so all we need to do is targeting those two, “filter” the label text in case the product is already in the Cart, and return that back to WooCommerce. If this looks like Japanese to you don’t worry – simply copy/paste the snippet below!

PHP Snippet: Rename “Add to Cart” Button if Product Already @ WooCommerce Cart
/** * @snippet Change "Add to Cart" Button Label if Product Already @ Cart * @how-to Watch tutorial @ https://businessbloomer.com/?p=19055 * @source https://businessbloomer.com/?p=73974 * @author Rodolfo Melogli * @compatible WC 3.5.4 * @donate $9 https://businessbloomer.com/bloomer-armada/ */ // Part 1 // Edit Single Product Page Add to Cart add_filter( 'woocommerce_product_single_add_to_cart_text', 'bbloomer_custom_add_cart_button_single_product' ); function bbloomer_custom_add_cart_button_single_product( $label ) { foreach( WC()->cart->get_cart() as $cart_item_key => $values ) { $product = $values['data']; if( get_the_ID() == $product->get_id() ) { $label = __('Already in Cart. Add again?', 'woocommerce'); } } return $label; } // Part 2 // Edit Loop Pages Add to Cart add_filter( 'woocommerce_product_add_to_cart_text', 'bbloomer_custom_add_cart_button_loop', 99, 2 ); function bbloomer_custom_add_cart_button_loop( $label, $product ) { if ( $product->get_type() == 'simple' && $product->is_purchasable() && $product->is_in_stock() ) { foreach( WC()->cart->get_cart() as $cart_item_key => $values ) { $_product = $values['data']; if( get_the_ID() == $_product->get_id() ) { $label = __('Already in Cart. Add again?', 'woocommerce'); } } } return $label; }
Hello Rodolfo,
Thank you very much for sharing this tip ๐
Sadly when using a cache plugin (what often happens), this seems to not work correctly even if “Ajax Add to Cart” is disabled. Example: when the product is removed from the shopping cart, “already in cart” is still displayed on the product page or on the shop page (even after a page refresh).
Do you have an idea?
Many thanks in advance.
Hey Svan, works for me with SiteGround cache… maybe ask your cache plugin support?
Thanks man.
But how can you change the “add to cart button” to “already ordered” if you only wish to have one product per person?
Hello Rexy – thanks so much for your comment! Yes, this is possible – but unfortunately this is custom work and I cannot provide a complementary solution here via the blog comments. Thanks a lot for your understanding! ~R
Hi, how to change to the red color “Already in Cart. Add again?” text? Or do you have link for that please..
Hey Dannie, thanks so much for your comment! Yes, this is possible – but unfortunately this is custom work and I cannot provide a complementary solution here via the blog comments. If you’d like to get a quote, feel free to contact me here. Thanks a lot for your understanding! ~R
hello
work great
can replace add to cart link after add to cart. with change label. change link to pay (checkout page?)
Hey Ahmad, thanks so much for your comment! Yes, this is possible – but unfortunately this is custom work and I cannot provide a complementary solution here via the blog comments. Thanks a lot for your understanding! ~R
Hi,
The only problem with this snippet is when you remove an item from cart the already in cart button will stay in place, even if item is removed.
Michel.
Good point Michel, I guess the snippet could be “Ajaxified” in order to detect Ajax calls such as the remove from cart. Unfortunately this is custom work and I cannot provide a complementary solution here via the blog comments. Thanks a lot for your understanding! ~R
work only after refresh the page
Possibly you need to disable the “Ajax Add to Cart”, good point ๐
Hello, Does this code serve for variable products?
I have only variable products in my shop.
Hey Nerea, I haven’t tested it with variable products! Give it a go and let me know ๐
Nice one, definitely will use it!
One quicky: the text “Already in Cart. Add again?” is not in the standard woocommerce language file, is it? Should I put a new entry into it to use this text? Or some other place? What’s the recommended method?
Hey Peter, thanks for your comment! As you can see from the snippet I added it to the ‘woocommerce’ textdomain, so you can now translate that with any translation plugins ๐
You are a great !!!
Thank you
๐