如何在WooCommerce购物车页面仅为特定商品显示复选框
如何在WooCommerce购物车页面仅为特定商品显示复选框
嗨,我来帮你搞定这个问题!你现在的代码不管购物车里有没有特定商品都会显示复选框,要实现“仅当特定商品在购物车时才显示”的效果,我们需要先检查购物车中是否包含目标商品,再决定是否输出内容。
思路很简单:
- 先定义你要检测的目标商品ID
- 遍历购物车中的所有商品,检查是否有商品ID和目标ID匹配
- 如果找到匹配的商品,就显示复选框和文本;否则不显示
下面是修改后的完整代码:
// Woocommerce - CHECKBOX Disclaimer on Add To Cart Page add_action('woocommerce_proceed_to_checkout', 'Disclaimer1_test', 10); function Disclaimer1_test() { // 替换成你需要检测的特定商品ID $target_product_id = 123; $product_in_cart = false; // 遍历购物车中的所有商品 foreach (WC()->cart->get_cart() as $cart_item) { $product = $cart_item['data']; // 检查当前商品ID是否匹配目标ID if ($product->get_id() == $target_product_id) { $product_in_cart = true; break; // 找到后直接跳出循环,不用再检查其他商品 } } // 如果目标商品在购物车中,才显示复选框和文本 if ($product_in_cart) { echo '<input type="checkbox" required />'; echo '<p>This is a test</p>'; } }
我来给你解释几个关键点:
- 用
WC()->cart->get_cart()获取购物车中的所有商品数据,这比直接用global $product更靠谱——因为这个钩子下的$product不一定对应购物车里的商品(购物车可能有多个商品) - 遍历购物车时,通过
$cart_item['data']获取商品对象,再用get_id()拿到商品ID进行对比 - 一旦找到匹配的商品,就把
$product_in_cart设为true并跳出循环,能提升代码运行效率 - 最后只有当
$product_in_cart为true时,才输出复选框和文本
你只需要把代码里的123替换成你实际需要检测的商品ID就可以用啦!
备注:内容来源于stack exchange,提问作者JohnLyons
相关产品推荐
相关产品推荐

