php - 如果 WooCommerce 购物车中有特定产品,则强制“运送到不同地址”
问题描述
当特定产品在结帐时,我正在尝试添加一个片段以激活默认打开的“运送到其他地址”。
我在 Woocommerce相关的回答线程中找到了为特定产品启用“运送到不同地址”复选框,它运行良好!
但是,不能取消选中“运送到其他地址”复选框。如果结账时有特定产品,则需要提供不同的送货地址。
目标:将这些特定产品的“运送到其他地址”复选框设为灰色。
我只是更改了代码 $products_ids = array(10800, 11907);
以满足我的需求。
我已经尝试解开该功能,但整个代码不起作用。因此,我正在寻找使该复选框变灰但保持上述代码完全正常工作的最佳方法。
解决方案
当购物车中有产品时,您可以将自定义类添加到结帐正文标签。
因此,使用 CSS 规则,您可以隐藏“运送到其他地址?” 复选框。
使用这个答案:
您可以获取代码并创建一个新的自定义函数(返回与以前相同的结果,该函数除了产品 id 没有被修改):
function check_if_product_is_in_cart() {
$products_ids = array( 10800, 11907 );
$found = $others_found = false;
foreach ( WC()->cart->get_cart() as $cart_item ){
if (in_array( $cart_item['data']->get_id(), $products_ids ) ){
$found = true;
} else {
$others_found = true;
}
}
if ( $found && ! $others_found ) {
return true;
} else {
return false;
}
}
然后您可以根据函数的结果启用或禁用该复选框:
add_filter( 'woocommerce_ship_to_different_address_checked', 'filter_cart_needs_shipping_address');
function filter_cart_needs_shipping_address( $checked ) {
return check_if_product_is_in_cart();
}
最后,您可以使用相同的功能将自定义类添加到结帐正文标签:
add_filter( 'body_class', 'add_body_class' );
function add_body_class( $classes ) {
if ( ! is_checkout() ) {
return $classes;
}
if ( check_if_product_is_in_cart() ) {
$classes[] = 'hide_ship_to_different_address_checkbox';
}
return $classes;
}
此时,您只需在活动主题的样式表中添加 CSS 规则:
该代码已经过测试并且可以工作。将它添加到您的活动主题的functions.php。
推荐阅读
- angular - 由于 localStorage 变量的值而动态更改导航栏的问题
- python - 计算从最接近的矩阵获得的矩阵索引的平均值
- java - 如何扩展 Android Chronometer?
- python - 关于使用 dict 拆分数据帧的错误
- vue.js - webpack 将不同入口点的所有依赖项捆绑在一个包中,并在所有相应的 html 中使用相同的包
- swift - 如何在可可应用程序中合成鼠标点击?
- xamarin.forms - 使用 xamarin.forms 未完全加载 ListView 项目
- quantum-computing - 在真正的量子计算机上测试 Q# 代码?
- animation - 调整大小时的 SwiftUI 文本剪辑
- javascript - CSS 中的 Angular 组件样式