我有条件地取消设置woocommerce结帐页面上的账单地址字段,但当提交订单时,woocommerce显示错误:
请输入地址以继续。
然后,我尝试在woocommerce_default_address_fields上添加一个过滤器,使这些字段成为可选字段--这似乎只有在这些字段没有被取消设置的情况下才有效。
// make address fields optional - this works fine without the next filter
add_filter( 'woocommerce_default_address_fields' , 'filter_default_address_fields', 20, 1 );
function filter_default_address_fields( $address_fields ) {
// Only on checkout page
if( ! is_checkout() ) return $address_fields;
// All field keys in this array
$fields = array('country','company','address_1','address_2','city','state','postcode');
// Loop through each address fields (billing and shipping)
foreach( $fields as $key_field )
$address_fields[$key_field]['required'] = false;
return $address_fields;
}
//conditionally unset fields
add_filter( 'woocommerce_checkout_fields' , 'simplify_checkout' );
function simplify_checkout( $fields ) {
$customField = false;
foreach( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
// Check if cart item has attribute
if ( ! empty ($cart_item['custom_attribute']) ) $registry = true;
}
if( $customField ) {
unset($fields['billing']['billing_company']);
unset($fields['billing']['billing_address_1']);
unset($fields['billing']['billing_address_2']);
unset($fields['billing']['billing_city']);
unset($fields['billing']['billing_postcode']);
unset($fields['billing']['billing_country']);
unset($fields['billing']['billing_state']);
}
return $fields;
}
我希望仍然能够有条件地隐藏/取消设置字段沿着一个成功的结帐提交。
2条答案
按热度按时间oknwwptz1#
两天前,我在验证消息上遇到了这个问题。我只向一个国家销售产品,所以我创建了以下解决方案。如果您要销售的国家较少,这可能也适用于您:
1.取消注解/删除
1.转到 *WooCommerce -〉设置-〉销售到特定国家 * 并输入您的国家。
1.现在验证消息处于非活动状态,因为“国家/地区”字段是必填字段。您现在可以使用CSS将其删除。
#billing_country_field { display: none; }
pxq42qpu2#
只需更改操作名称并尝试: