php - 如果特定产品在 Woocommerce 的购物车中,则显示自定义结帐字段
问题描述
因此,我在结帐页面的计费部分中有一些自定义字段,我只想在购物车中有 ID (603) 的产品时显示这些字段。
目前,如果购物车中有一个不是 id 603 的产品,我下面的代码可以隐藏这些字段,但一个问题是当我有 603 并且购物车中有另一个产品时,它会取消设置字段,
如果购物车中没有 603 或者只显示它们,那么隐藏字段的最佳方法是什么?
这是我正在使用的当前代码
function conditional_checkout_fields_products( $fields ) {
$cart = WC()->cart->get_cart();
foreach ( $cart as $item_key => $values ) {
$product = $values['data'];
if ( $product->id != 603 ) {
unset( $fields['billing']['billing_prev_injuries'] );
unset( $fields['billing']['billing_dogs_events'] );
unset( $fields['billing']['billing_dogs_age'] );
unset( $fields['billing']['billing_dogs_breed'] );
unset( $fields['billing']['billing_dogs_name'] );
}
}
return $fields;
}
add_filter( 'woocommerce_checkout_fields', 'conditional_checkout_fields_products' );
解决方案
以下将完成这项工作:
add_filter( 'woocommerce_checkout_fields', 'conditional_checkout_fields_products' );
function conditional_checkout_fields_products( $fields ) {
$is_in_cart = false;
foreach ( WC()->cart->get_cart() as $cart_item ) {
if ( $cart_item['data']->get_id() == 603 ) {
$is_in_cart = true;
break;
}
}
if ( ! $is_in_cart ) {
unset( $fields['billing']['billing_prev_injuries'] );
unset( $fields['billing']['billing_dogs_events'] );
unset( $fields['billing']['billing_dogs_age'] );
unset( $fields['billing']['billing_dogs_breed'] );
unset( $fields['billing']['billing_dogs_name'] );
}
return $fields;
}
代码位于您的活动子主题(或活动主题)的 function.php 文件中。测试和工作。
推荐阅读
- jspdf - jsPDF fromHTML 图像(到大)和页边距底部(不工作)
- android - paddingBottom 尺寸是多少?
- selenium - 我正在尝试使用 Capybara 找到一个不可见的字段来填写,但我所做的一切似乎都不起作用
- javascript - createElement(script)/appendChild 如何调试添加的脚本?
- python - 使用绑定方法调用 PyObject_Call 段错误
- android - java.lang.NoSuchMethodError:Lcom/google/firebase/FirebaseApp 类中没有虚拟方法 zzbqo()Z;或其超类
- ios - iOS collectionView 单元格排序顺序
- java - 将标签绑定到 StringProperty 时出现语法错误
- javascript - 使用 JQuery 根据月份和日期范围显示/隐藏 div
- java - com.fasterxml.jackson.annotation 包不可见