一个客户说她网站上的访客(没在网站上登录的用户)无法添加任何产品到购物车上,显示无库存。
由于这个网站不是我做的,她只是找我做网站维护而已,所以看到这个问题时,我的第一反应是用了什么插件,看了下后并没有找到什么。竟然不是插件的问题,那就剩下代码了,最后在主题编辑器里面的 functions.php 找到了对于的设置。
解决方法
上面的php代码是对访问者隐藏产品价格的,只有登录后才会显示对应价格。
隐藏价格完全没问题,不过使用的方式不对。使用的 woocommerce_is_purchasable 过滤器影响了产品的购买能力,设置false来针对未注册用户时,也阻止了他们将产品添加到购物车的权限,WooCommerce会将产品视为不可购买的。
居然找到了问题,那么修改这代码就行了。
add_filter( 'woocommerce_variable_sale_price_html', 'update_price_html', 10, 2 );
add_filter( 'woocommerce_variable_price_html', 'update_price_html', 10, 2 );
add_filter( 'woocommerce_get_price_html','update_price_html', 999, 2 );
function update_price_html( $price_html, $product ) {
if( !is_user_logged_in() ) { // 如果用户未登录
$price_html = "需要登录才能查看价格";
}
return $price_html;
}
我这就是单纯修改价格的HTML,而不干预产品的购买能力。
这段代码会修改未注册用户看到的价格HTML,将实际价格替换为显示消息“需要登录才能查看价格”,但不会影响产品的购买能力。用户可以将产品添加到购物车并正常购买,但在没登录时不会看到价格。