【发布时间】:2019-06-19 10:39:55
【问题描述】:
我有条件地取消了 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;
}
我希望仍然能够有条件地隐藏/取消设置字段以及成功的结帐提交。
【问题讨论】:
标签: php wordpress woocommerce