2 回答
TA贡献1883条经验 获得超3个赞
由于当购物车不包含 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;
}
}
刚刚测试并且工作正常。祝你有美好的一天。
TA贡献1860条经验 获得超9个赞
在过滤器钩子中,您需要始终在最后返回第一个函数参数,即 here $fields。尝试以下功能更简单的方法:
add_filter( 'woocommerce_checkout_fields' , 'add_real_dob_checkout_field' );
function add_real_dob_checkout_field( $fields ) {
// Loop through cart items
foreach ( WC()->cart->get_cart() as $cart_item ) {
// Check for 'require-dob' custom field
if( get_post_meta( $cart_item['product_id'], 'require-dob', true ) == 1 ) {
$fields['shipping']['real_dob'] = array(
'type' => 'text',
'class'=> array( 'form_right_half', 'req'),
'label' => __('Birthdate'),
'required' => true,
);
break; // Stop the loop
}
}
return fields; // Always return the main function argument at the end for a filter hook
}
- 2 回答
- 0 关注
- 190 浏览
添加回答
举报