Change add to cart text/button if a product is in cart on WooCommerce

With wp function

<div>
<div>//Rename the button on the Product page</div>
<div>add_filter( 'woocommerce_product_single_add_to_cart_text', 'ts_product_add_cart_button' );</div>
<div>function ts_product_add_cart_button( $label ) {</div>
<div>   foreach( WC()->cart->get_cart() as $cart_item_key => $values ) {</div>
<div>      $product = $values['data'];</div>
<div>      if( get_the_ID() == $product->get_id() ) {</div>
<div>         $label = __('In cart', 'woocommerce');</div>
<div>      }</div>
<div>   }</div>
<div>   return $label;</div>
<div>}</div>
<div>//Rename the button on the Shop page</div>
<div>add_filter( 'woocommerce_product_add_to_cart_text', 'ts_shop_add_cart_button', 99, 2 );</div>
<div>function ts_shop_add_cart_button( $label, $product ) {</div>
<div>   if ( $product->get_type() == 'simple' && $product->is_purchasable() && $product->is_in_stock() )</div>
<div>   {</div>
<div>      foreach( WC()->cart->get_cart() as $cart_item_key => $values ) {</div>
<div>         $_product = $values['data'];</div>
<div>         if( get_the_ID() == $_product->get_id() ) {</div>
<div>            $label = __('In cart', 'woocommerce');</div>
<div>         }</div>
<div>       }</div>
<div>   }</div>
<div>    return $label;</div>
<div>}</div>
</div>

With Javascript

// Conditional function that checks if a product is in cart and return the correct button text
function change_button_text( $product_id, $button_text ) {
    foreach( WC()->cart->get_cart() as $item ) {
        if( $product_id === $item['product_id'] ) {
            return __('Already in Cart. Add again?', 'woocommerce');
        }
    }
    return $button_text;
}

// Archive pages: For simple products (ajax add to cart button)
add_filter( 'woocommerce_product_add_to_cart_text', 'change_ajax_add_to_cart_button_text', 10, 2 );
function change_ajax_add_to_cart_button_text( $button_text, $product ) {
    if ( $product->is_type('simple') ) {
        $button_text = change_button_text( $product->get_id(), $button_text );
    }
    return $button_text;
}

// Single product pages: Simple and external products
add_filter( 'woocommerce_product_single_add_to_cart_text', 'change_single_add_to_cart_button_text', 10, 2 );
function change_single_add_to_cart_button_text( $button_text, $product ) {
    if (  ! $product->is_type('variable') ) {
        $button_text = change_button_text( $product->get_id(), $button_text );
    }
    return $button_text;
}

// Single product pages: Variable product and its variations
add_action( 'woocommerce_after_variations_form', 'action_after_variations_form_callback' );
function action_after_variations_form_callback() {
    global $product;

    // Get the produc variation Ids for the variable product
    $children_ids = $product->get_visible_children();

    $ids_in_cart  = [];

    // Loop through cart items
    foreach( WC()->cart->get_cart() as $item ) {
        if( in_array( $item['variation_id'], $children_ids ) ) {
            $ids_in_cart[] = $item['variation_id'];
        }
    }
    ?>
    <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%20type%3D%22text%2Fjavascript%22%3E%0A%20%20%20%20jQuery(function(%24)%7B%0A%20%20%20%20%20%20%20%20var%20b%20%3D%20'button.single_add_to_cart_button'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20t%20%3D%20'%3C%3Fphp%20echo%20%24product-%3Esingle_add_to_cart_text()%3B%20%3F%3E'%3B%0A%0A%20%20%20%20%20%20%20%20%24('form.variations_form').on('show_variation%20hide_variation%20found_variation'%2C%20function()%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24.each(%3C%3Fphp%20echo%20json_encode(%24ids_in_cart)%3B%20%3F%3E%2C%20function(j%2C%20v)%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20i%20%3D%20%24('input%5Bname%3D%22variation_id%22%5D').val()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if(v%20%3D%3D%20i%20%26%26%20i%20!%3D%200%20)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24(b).html('%3C%3Fphp%20_e('Already%20in%20Cart.%20Add%20again%3F'%2C%20'woocommerce')%3B%20%3F%3E')%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24(b).html(t)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D)%3B%0A%20%20%20%20%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="&lt;script&gt;" title="&lt;script&gt;" />
    <?php
}

Leave a Comment