php - WooCommerce:当产品已经在购物车中时更改添加到购物车的文本
问题描述
我在更改WooCommerce/WordPress 中“添加到购物车”按钮的文本时遇到问题。
目前下面的代码,我想要它,以便如果产品已经在购物车中,“添加到购物车”按钮通过更改文本以说明它已经在购物车中来反映这一点。
目前,即使产品在购物车中,它仍然是“添加到购物车” 。奇怪的是,如果我删除 if 条件,文本会发生变化,所以我假设 if 条件有问题,但我看不出它有任何问题。
add_filter('woocommerce_product_add_to_cart_text', 'woocommerce_custom_add_to_cart_text');
function woocommerce_custom_add_to_cart_text($add_to_cart_text, $product_id) {
global $woocommerce;
foreach($woocommerce->cart->get_cart() as $key => $val ) {
$_product = $val['data'];
if($product_id == $_product->id ) {
$add_to_cart_text = 'Already in cart';
}
return $add_to_cart_text;
}
}
解决方案
$_product->id
应该$_product->get_id()
return
在 foreach 循环外使用- 全局
$woocommerce
不是必需的 woocommerce_product_add_to_cart_text
过滤器钩子的第二个参数是$product
,不是$product_id
所以你得到
function woocommerce_custom_add_to_cart_text( $add_to_cart_text, $product ) {
// Get cart
$cart = WC()->cart;
// If cart is NOT empty
if ( ! $cart->is_empty() ) {
// Iterating though each cart items
foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) {
// Get product id in cart
$_product_id = $cart_item['product_id'];
// Compare
if ( $product->get_id() == $_product_id ) {
// Change text
$add_to_cart_text = __( 'Already in cart', 'woocommerce' );
break;
}
}
}
return $add_to_cart_text;
}
add_filter( 'woocommerce_product_add_to_cart_text', 'woocommerce_custom_add_to_cart_text', 10, 2 );
推荐阅读
- r - 在 macOS (Catalina) 下逐行运行 Rcpp (debug)
- javascript - 在 React useEffect 挂钩中清理 Lodash 去抖动功能
- python - 我不断收到 TypeError: can only concatenate str (not "NoneType") to str
- c# - 文本框随机消失
- angularjs - 无法下载 Angular.js
- c++ - 有谁知道为什么当我尝试在 VS 2019 中运行程序时,我的防病毒软件将其检测为 heur 病毒并自动关闭它?
- python - Python 3.6 <-> Python 3.4 互通
- java - 提交添加新消息时出现错误 403
- perforce - 在 perforce 中删除和添加相同的符号链接
- java - WebSphere Liberty 在 WAR 的类目录中找不到 log4j.properties