如何在WooCommerce 3中判断购物车是否非空?
如何判断WooCommerce购物车是否非空?
我来帮你分析下之前代码的问题,以及正确的实现方式:
你之前尝试的代码问题
- 第一种写法:
add_action( 'wp_footer', 'redirecionar' ); function redirecionar(){ global $woocommerce; if ( is_page('carrinho-de-compras') and !sizeof($woocommerce->cart->cart_contents) ) { // do something } }
- 首先,
$woocommerce->cart->cart_contents这种调用方式在新版本WooCommerce中已不再是官方推荐写法,更建议使用WC()->cart全局对象来操作购物车。 - 其次,你的条件
!sizeof($woocommerce->cart->cart_contents)是判断购物车为空的场景,如果目标是判断购物车非空,逻辑需要反过来(比如sizeof($woocommerce->cart->cart_contents) > 0)。
- 第二种写法:
add_action( 'wp_footer', 'vazio' ); function vazio() { if ( ! WC()->cart->get_cart_contents_count() == 0 ) { // do something } }
这里的核心问题是运算符优先级错误:!会先对WC()->cart->get_cart_contents_count()的结果取反,再和0比较,导致逻辑完全偏离预期。正确的写法应该是WC()->cart->get_cart_contents_count() != 0,或者用括号明确优先级:! (WC()->cart->get_cart_contents_count() == 0)。
正确的解决方案
WooCommerce官方提供了专门的is_empty()方法来判断购物车状态,这个方法兼容性强、逻辑清晰,直接通过! WC()->cart->is_empty()就能准确判断购物车非空的情况。
完整的正确代码如下:
<?php add_action( 'wp_footer', 'vazio' ); function vazio() { if ( ! WC()->cart->is_empty() ) { ?> <div style="width: 20%;" class="footer-section <?php echo esc_html($woo);?>"> <a href="<?php echo 'https://my_web_page.pt/finalizar-compra';?>" title="Finalizar Compra"><i class="fa fa-credit-card"></i></a> </div> <?php } } ?>
这种写法既避免了手动计算的误差,也能适配不同版本的WooCommerce,是官方推荐的实现方式。
内容的提问来源于stack exchange,提问作者user5483053
相关产品推荐
相关产品推荐

