php - 有条件地将自定义结帐字段添加到 WooCommerce 中的运输部分
问题描述
我有某些 Woocommerce 产品需要客户(或产品接收者)提供出生日期。客户在创建帐户以结帐时需要提供出生日期,所以我已经设置好了,但是如果选中“运送到其他地址”并且如果有任何物品,我需要在运输部分添加一个必填的 DOB 字段在购物车中是需要出生日期的地方。
这是我尝试过的:
add_filter( 'woocommerce_checkout_fields' , 'real_dob' );
function real_dob( $fields ) {
$fields['shipping']['real_dob'] = array(
'type' => 'text',
'class'=> array( 'form_right_half', 'req'),
'label' => __('Birthdate'),
'required' => true,
);
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
$dob_check = get_post_meta( $cart_item['product_id'], 'require-dob', true );
if ( $dob_check == 1 ) {
$dob = true;
break;
}}
if ($dob)
return $fields;
}
这适用于购物车中的产品需要出生日期时 - 添加了自定义字段。但是,如果购物车中没有产品需要 DOB,则根本不会加载任何结帐字段,无论是计费还是运输。我错过了什么?
解决方案
由于当购物车不包含 DOB 产品时过滤器不返回任何内容,因此它在结帐时既不显示帐单也不显示运输字段。
您可以像这样修改您的代码:
add_filter( 'woocommerce_checkout_fields' , 'real_dob' );
function real_dob( $fields ) {
//if(cart DOES NOT contain any DOB products)
if(true)
{
return $fields;
}
//if(cart contains DOB products)
else
{
$fields['shipping']['real_dob'] = array(
'type' => 'text',
'class'=> array( 'form_right_half', 'req'),
'label' => __('Birthdate'),
'required' => true,
);
return $fields;
}
}
刚刚测试并且工作正常。祝你有美好的一天。
推荐阅读
- android - Expo扫描仪android尺寸问题
- c++ - 如何确定 split_apply() 是否为 noexcept?
- ethereum - 尝试使用 pancakeswap 函数 swapExactTokensForETH 时如何解决错误“TransferHelper:TRANSFER_FROM_FAILED”
- javascript - Debounce 不会每秒执行一次最大请求
- asp.net - RDLC 报告在 IIS 中发布和托管时不起作用
- r - 仅从一个列表中删除 JSON 嵌套
- advanced-custom-fields - 使用高级自定义字段复制古腾堡块内容以创建古腾堡块
- vmware - Arch 上的 Vmware:无法打开 /dev/vmmon:没有这样的文件或目录
- flutter - 我想在 Flutter 的类模型中将 Screen_Name 作为属性传递
- java - 如果使用重试策略的前 3 次尝试重试失败,如何使用新的访问令牌重试