我有一些电子商务网站,其中客户帐单地址是在后端预定义的。
我需要将“帐单地址”字段设置为“只读”,以避免客户替换放在那里的信息......但我不知道如何/在哪里做...
有可能吗?
答案 0 :(得分:4)
将以下代码放入主题" function.php"文件。
add_action('woocommerce_checkout_fields','customization_readonly_billing_fields',10,1);
function customization_readonly_billing_fields($checkout_fields){
$current_user = wp_get_current_user();;
$user_id = $current_user->ID;
foreach ( $checkout_fields['billing'] as $key => $field ){
if($key == 'billing_address_1' || $key == 'billing_address_2'){
$key_value = get_user_meta($user_id, $key, true);
if( strlen($key_value)>0){
$checkout_fields['billing'][$key]['custom_attributes'] = array('readonly'=>'readonly');
}
}
}
return $checkout_fields;
}
此函数检查地址字段是否具有值(即,是否指定了地址),如果它具有值,则使字段/ s只读。否则保持字段打开以为用户添加数据。 希望这会有所帮助。
答案 1 :(得分:0)
$checkout_fields['billing'][$key]['custom_attributes'] = array('readonly'=>'readonly');
这解决了问题
答案 2 :(得分:0)
您尚未指定要将帐单地址字段设置为只读的要自定义的表单。通常,帐单邮寄地址字段会在WooCommerce网站上以两种形式显示:
如果您的案子是第一个,那么zipkundan's的答案是最好的。但是,如果是第二种情况,则将以下代码复制并粘贴到活动主题(或子主题,如果有)的functions.php文件中:
add_filter('woocommerce_address_to_edit', 'cb_woocommerce_address_to_edit');
function cb_woocommerce_address_to_edit($address){
array_key_exists('billing_first_name', $address)?$address['billing_first_name']['custom_attributes'] = array('readonly'=>'readonly'):'';
array_key_exists('billing_last_name', $address)?$address['billing_last_name']['custom_attributes'] = array('readonly'=>'readonly'):'';
array_key_exists('billing_email', $address)?$address['billing_email']['custom_attributes'] = array('readonly'=>'readonly'):'';
array_key_exists('billing_email-2', $address)?$address['billing_email-2']['custom_attributes'] = array('readonly'=>'readonly'):'';
return $address;
}
上面的代码将使以下字段为只读:
同一页上其他表单字段的数组键如下:
此外,您可以使只读字段显得有些暗淡。因此,将以下CSS添加到主题的style.css
.woocommerce-address-fields input[readonly="readonly"]{
opacity: 0.5;
}
答案 3 :(得分:0)
这个对我有用。 https://www.sitekickr.com/snippets/woocommerce/make-checkout-field-read
add_filter('woocommerce_billing_fields', 'my_woocommerce_billing_fields');
function my_woocommerce_billing_fields($fields)
{
$fields['billing_first_name']['custom_attributes'] = array('readonly'=>'readonly');
$fields['billing_last_name']['custom_attributes'] = array('readonly'=>'readonly');
return $fields;
}