我有一些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,那么所有结账字段都不会加载,既不计费也不发货。我错过了什么?
在过滤器挂钩中,您需要始终在末尾返回第一个函数参数,即此处的$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
}
由于当购物车不包含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;
}
}
刚刚测试过,效果很好。祝您今天过得愉快。
在WooCommerce结帐表单中,我自定义了字段。但是,如果产品属于特定类别,我不希望显示这些字段。我让那部分工作。 接下来,我想取消设置一些自定义签出字段,但我不知道如何取消设置或现在取消设置。取消设置普通签出字段很容易,例如,我使用以下代码: 然而,对于自定义结帐字段它不起作用。下面是我如何设置这个自定义字段: 由于这属于它自己的部分,而不是账单、发货或其他字段,我找不到删除它的方法。 我尝
WordPress-WooCommerce 我想做的是: null 邮件里什么也没印。 请解决。提前谢了。
我正在使用wordpress 4.1与ACF v4。我有一个添加了自定义字段的自定义帖子类型,每次添加新类别时都需要添加新的自定义字段。如果我自动添加类别“轿车”,我必须添加自定义字段“轿车”。我可以使用插件函数执行此操作吗?或者我必须用代码,在数据库中插入来做到这一点?提前致谢!!
我有一个插件管理我的货件与两个自定义状态:等待-装运和装运。 我尝试添加一个电子邮件发送时,订单传递到发货。 我在Stack Overflow:Woocommerce退款电子邮件中发现了这一点,但我可以知道它是如何工作的 下面是我的插件文件代码: 我用下面的helgatheviking和Adrien Leber的建议更新了我的代码 和我的班级: 当我改变我的订单状态时,什么也没有发生!我的触发函数
遵循电子商务签出字段自定义文档: 使用操作和筛选器自定义签出字段 我已经通过函数向woocommerce结帐页面添加了一个自定义字段。php。 我担心是否必须清理自定义字段的用户输入? 我认为它不需要消毒,因为它被传递到帐单字段中,如:$fields['billing'],对吗? 如果没有,我如何清理这个自定义字段? 创建此自定义字段意味着接受长度不超过50的文本字符串(拉丁文)和整数的组合。
我正在尝试根据是否已选中自定义复选框向签出添加费用。我真的很接近让这项工作,但我有问题获得后的价值观,以确定是否应申请或不收费。 以下是我自定义字段的代码: 这是可行的,而且字段显示得非常完美。 在我的主题中form-checkout.php的底部,我添加了以下javascript,以在检查字段时更新购物车总数: 这将更新订单总数并运行以下代码(这就是问题所在): 我知道这部分被调用是因为如果我去