[英]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. 我有Child-Theme function.php,其中有第二个转到购物车按钮,并且可以正常工作。
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' );
}
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. 代码在您的活动子主题(或主题)的function.php文件中,或者在任何插件文件中。
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: 如果启用了Ajax,则对于归档页面 (例如商店页面或产品类别页面) 上的NON可变产品,并且想要获取此实时事件,也应该添加以下内容:
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. 代码在您的活动子主题(或主题)的function.php文件中,或者在任何插件文件中。
Tested and works. 经过测试和工作。
Add a add-to-cart.php to your theme/woocommerce/loop folder. 将add-to-cart.php添加到您的theme / woocommerce / loop文件夹中。 Then add the code below before the sprintf button function.
然后在sprintf按钮功能之前添加以下代码。
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 将sprintf函数的最后一行更改为
esc_html( ( !empty( $product_addons ) )?'Select options':$buttonText )
You might need to refine this if you switch on the Ajax cart 如果打开Ajax购物车,则可能需要优化此设置
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.