Woocommerce只读帐单字段

时间:2016-03-28 10:34:38

标签: wordpress forms woocommerce

我有一些电子商务网站,其中客户帐单地址是在后端预定义的。

我需要将“帐单地址”字段设置为“只读”,以避免客户替换放在那里的信息......但我不知道如何/在哪里做...

有可能吗?

4 个答案:

答案 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网站上以两种形式显示:

  1. 在结帐表格上
  2. 在我的帐户/编辑地址/账单/页面上

如果您的案子是第一个,那么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;
}

上面的代码将使以下字段为只读:

  • 计费名字
  • 计费姓氏
  • 帐单电子邮件地址
  • 结算确认电子邮件地址

同一页上其他表单字段的数组键如下:

  • billing_company
  • billing_country
  • billing_address_1
  • billing_address_2
  • billing_city
  • billing_state
  • billing_postcode
  • billing_phone

此外,您可以使只读字段显得有些暗淡。因此,将以下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;
}