WooCommerce - 在现有结帐字段上覆盖结算状态和邮政编码
问题描述:
我无法找到ovveride结算状态和邮政编码的方式。WooCommerce - 在现有结帐字段上覆盖结算状态和邮政编码
如何编辑现有结算字段的其他部分,如结算状态和邮政编码?
这是我在functions.php
文件在我的子主题(我已经包括影响计费部分的代码):
<?php
function my_custom_checkout_field($checkout) {
global $wpdb;
$check_zone = $wpdb->get_results("select area_name from brick_area where id='".$_SESSION['area']."'",ARRAY_A);
if(!empty($check_zone)){
$check_zoneid = $check_zone['0'];
}
woocommerce_form_field('my_field_name', array(
'type' => 'text',
'class' => array('my-field-class form-row-wide'),
'label' => __('Delivery Area'),
'placeholder' => __('Area'),
'readonly' =>'readonly',
'default' => $check_zoneid['area_name']
), $checkout->get_value('my_field_name'));
woocommerce_form_field('my_expected_date', array(
'type' => 'text',
'class' => array('my-field-class form-row-wide'),
'required' => true,
'label' => __('Expected Delivery Date'),
'placeholder' => __('Enter expected delivery date.'),
), $checkout->get_value('my_expected_date'));
/*woocommerce_form_field('my_expected_time', array(
'type' => 'text',
'class' => array('my-field-class form-row-wide'),
'required' => true,
'label' => __('Expected Delivery Time'),
'placeholder' => __('Enter expected delivery time.'),
), $checkout->get_value('my_expected_time'));*/
woocommerce_form_field('site_contact_name', array(
'type' => 'text',
'class' => array('my-field-class form-row-wide'),
'required' => true,
'label' => __('Site Contact Person Name'),
'placeholder' => __('Enter site contact person name.'),
), $checkout->get_value('site_contact_name'));
woocommerce_form_field('site_contact_phone', array(
'type' => 'tel',
'class' => array('my-field-class form-row-wide'),
'required' => true,
'label' => __('Site Contact Phone Number'),
'placeholder' => __('Enter site contact phone number.'),
), $checkout->get_value('site_contact_phone'));
}
$fields['billing']['billing_city']['default'] = $_SESSION['cn'];
add_filter('woocommerce_default_address_fields' , 'custom_override_default_address_fields');
function custom_override_default_address_fields($address_fields) {
// we are changing here billing_state field to required
$fields['billing']['billing_state']['required'] = true;
return $address_fields;
}
/*$fields['billing']['my_field_name']['default'] = $check_zoneid['area_name'];
$fields['billing']['my_field_name']['label'] = 'Area';*/
return $fields;
}
?>
感谢
答
这是完整的对状态和帐单邮政编码覆盖进行结算的方式,使结算选择器保留选项。
这里是代码的完全功能和测试代码:
- 取消设置计费状态和后置码校验字段
add_filter('woocommerce_checkout_fields' , 'partial_unsetting_checkout_fields');
function partial_unsetting_checkout_fields($fields) {
unset($fields['billing']['billing_state']);
unset($fields['billing']['billing_postcode']);
return $fields;
}
- 重新插入定制的帐单州和邮政编码结账字段
- 领域是单独一条线(宽度100%),可以使用:
'form-row-wide'
- 有2个字段并排在同一行上,可以使用:
-
'form-row-first'
为第一场 -
'form-row-last'
用于第二场
-
add_filter('woocommerce_default_address_fields' , 'art_override_default_address_fields');
function art_override_default_address_fields($address_fields) {
// @ for state
$address_fields['billing_state']['type'] = 'select';
$address_fields['billing_state']['class'] = array('form-row-wide');
$address_fields['billing_state']['required'] = true;
$address_fields['billing_state']['label'] = __('State', 'my_theme_slug');
$address_fields['billing_state']['placeholder'] = __('Enter state', 'my_theme_slug');
$address_fields['billing_state']['default'] ='Choice 1';
$address_fields['billing_state']['options'] = array(
'option_1' => 'Choice 1',
'option_2' => 'Choice 2',
'option_3' => 'Choice 3'
);
// @ for postcode
$address_fields['billing_postcode']['type'] = 'text';
$address_fields['billing_postcode']['class'] = array('form-row-wide');
$address_fields['billing_postcode']['required'] = true;
$address_fields['billing_postcode']['label'] = __('Postcode', 'my_theme_slug');
$address_fields['billing_postcode']['placeholder'] = __('Enter your postcode', 'my_theme_slug');
return $address_fields;
}
当然,这下去你的活动子主题的function.php文件或主题
官方参考:WooThemes - Customizing checkout fields using actions and filters
关于
'class'
财产有注2种方式来处理它:
答
//-------------------------- OVERRIDING BILLING STATE FIELD -------------------------------//
<?php
//Removing previous one by using unset
add_filter('woocommerce_checkout_fields' , 'custom_override_checkout_fields');
// Our hooked in function - $fields is passed via the filter!
function custom_override_checkout_fields($fields) {
unset($fields['billing']['billing_state']);
return $fields;
}
add_filter('woocommerce_default_address_fields' , 'art_override_default_address_fields');
function art_override_default_address_fields($address_fields) {
// @ for state
$address_fields['Billing_State']['type'] = 'text';
$address_fields['Billing_State']['class'] = array('form-row-wide');
$address_fields['Billing_State']['required'] = true;
$address_fields['Billing_State']['label'] = __('State', 'my_theme_slug');
$address_fields['Billing_State']['placeholder'] = __('Enter state', 'my_theme_slug');
$address_fields['Billing_State']['default'] =hgfdkda;
return $address_fields;
}
?>
sure @LoicTheAztec – art