Relabel "add to cart" button after add to cart in WooCommerce

I’d like to relabel my add to cart button after click on it and add one item to cart into add one more to cart.

Is this possible?

I have Child-Theme function.php with a second go to cart button and this is working.

But I don’t know how to solve this re-label after one item has been added to cart (shop only sells one item with different sizes). I hope that I am clear.

Here is my code:

add_filter( 'woocommerce_product_add_to_cart_text', 
'customizing_add_to_cart_button_text', 10, 2 );
add_filter( 'woocommerce_product_single_add_to_cart_text', 
'customizing_add_to_cart_button_text', 10, 2 );
function customizing_add_to_cart_button_text( $button_text, $product ) 
{

if ( WC()->cart->get_cart_contents_count() ) 
return __( 'Add one more to cart', 'woocommerce' );
} else {
return __( 'Add to cart ', 'woocommerce' );
}

Here is Solutions:

We have many solutions to this problem, But we recommend you to use the first solution because it is tested & true solution that will 100% work for you.

Solution 1

UPDATE: Below you will find the correct conditions to make this relabeling working:

add_filter( 'woocommerce_product_add_to_cart_text', 'customizing_add_to_cart_button_text', 10, 2 );
add_filter( 'woocommerce_product_single_add_to_cart_text', 'customizing_add_to_cart_button_text', 10, 2 );
function customizing_add_to_cart_button_text( $button_text, $product )
{
    $is_in_cart = false;

    foreach ( WC()->cart->get_cart() as $cart_item )
       if ( $cart_item['product_id'] == $product->get_id() ) {
           $is_in_cart = true;
           break;
       }

    if( $is_in_cart )
        $button_text = __( 'Add one more to cart', 'woocommerce' );

    return $button_text;
}

Code goes in function.php file of your active child theme (or theme) or also in any plugin file.

Tested and works.


if you have enabled Ajax, for NON variable products on archives pages (like shop pages or product category pages) and you want to get this live event, you should add this too:

add_action('wp_footer','custom_jquery_add_to_cart_script');
function custom_jquery_add_to_cart_script(){
    if ( is_shop() || is_product_category() || is_product_tag() ): // Only for archives pages
        $new_text = __( 'Add one more to cart', 'woocommerce' );
        ?>
            <script type="text/javascript">
                // Ready state
                (function($){
                    $('a.add_to_cart_button').click( function(){
                        $this = $(this);
                        $( document.body ).on( 'added_to_cart', function(){
                            $($this).text('<?php echo $new_text; ?>');
                            console.log('EVENT: added_to_cart');
                        });
                    });

                })(jQuery); // "jQuery" Working with WP (added the $ alias as argument)
            </script>
        <?php
    endif;
}

Code goes in function.php file of your active child theme (or theme) or also in any plugin file.

Tested and works.

Solution 2

Add a add-to-cart.php to your theme/woocommerce/loop folder. Then add the code below before the sprintf button function.

global $woocommerce;

$items = $woocommerce->cart->get_cart();
$inCart = false;
foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
   if($values['product_id'] == $product->id && $values['quantity'] > 1){
       $inCart = true;
       break;
   }
}

$buttonText = $inCart?'add one more':'add to cart';

Change the last line in the sprintf function to

esc_html( ( !empty( $product_addons ) )?'Select options':$buttonText )

You might need to refine this if you switch on the Ajax cart

Solution 3

This should work

 // Part 1
    // Single Product Page Add to Cart
     
    add_filter( 'woocommerce_product_single_add_to_cart_text', 'custom_add_cart_button_single_product', 9999 );
     
    function custom_add_cart_button_single_product( $label ) {
       if ( WC()->cart && ! WC()->cart->is_empty() ) {
          foreach( WC()->cart->get_cart() as $cart_item_key => $values ) {
             $product = $values['data'];
             if ( get_the_ID() == $product->get_id() ) {
                $label = 'Added to Cart';
                break;
             }
          }
       }
       return $label;
    }
     
    // Part 2
    // Loop Pages Add to Cart
     
    add_filter( 'woocommerce_product_add_to_cart_text', 'custom_add_cart_button_loop', 9999, 2 );
     
    function custom_add_cart_button_loop( $label, $product ) {
       if ( $product->get_type() == 'simple' && $product->is_purchasable() && $product->is_in_stock() ) {
          if ( WC()->cart && ! WC()->cart->is_empty() ) {
             foreach( WC()->cart->get_cart() as $cart_item_key => $values ) {
                $_product = $values['data'];
                if ( get_the_ID() == $_product->get_id() ) {
                   $label = 'Added to Cart';
                   break;
                }
             }
          }
       }
       return $label;
    }

Note: Use and implement solution 1 because this method fully tested our system.
Thank you 🙂

All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply