在Woocommerce中,我需要在结帐页面上设置三个字段的默认排序优先级(排序(:
第一个更改取决于'IT'
国家/地区代码的选择:
- 邮政编码 - "优先级" => 91,
另外两个是免费的,我只需要设置默认优先级:
- billing_email - "优先级" => 30,
- billing_phone - "优先级" => 40,
通过直接编辑文件,类wc国家.php核心文件如下所示,我得到了我需要的东西。但显然,在插件的每次更新中,我都会丢失更改。
现在我正在寻找一个钩子来以一种干净的方式完成这项工作。
在 wc 类国家/地区.php(第 935 行左右(来自:
IT' => array(
'postcode' => array(
'priority' => 65, // <============= HERE
),
'state' => array(
'required' => true,
'label' => __( 'Province', 'woocommerce' ),
),
),
我将"优先级"值从65
更改为91
:
IT' => array(
'postcode' => array(
'priority' => 91, // <============= HERE
),
'state' => array(
'required' => true,
'label' => __( 'Province', 'woocommerce' ),
),
),
和圆线 1203 在:
// Add email and phone fields.
if ( 'billing_' === $type ) {
$address_fields['billing_phone'] = array(
'label' => __( 'Phone', 'woocommerce' ),
'required' => true,
'type' => 'tel',
'class' => array( 'form-row-wide' ),
'validate' => array( 'phone' ),
'autocomplete' => 'tel',
'priority' => 100, // <============= HERE
);
$address_fields['billing_email'] = array(
'label' => __( 'Email address', 'woocommerce' ),
'required' => true,
'type' => 'email',
'class' => array( 'form-row-wide' ),
'validate' => array( 'email' ),
'autocomplete'=>'no'===get_option
('woocommerce_registration_generate_username' )
? 'email' : 'email username',
'priority' => 110, // <============= HERE
);
}
我将"优先级"值更改为:
// Add email and phone fields.
if ( 'billing_' === $type ) {
$address_fields['billing_phone'] = array(
'label' => __( 'Phone', 'woocommerce' ),
'required' => true,
'type' => 'tel',
'class' => array( 'form-row-wide' ),
'validate' => array( 'phone' ),
'autocomplete' => 'tel',
'priority' => 40, // <============= HERE
);
$address_fields['billing_email'] = array(
'label' => __( 'Email address', 'woocommerce' ),
'required' => true,
'type' => 'email',
'class' => array( 'form-row-wide' ),
'validate' => array( 'email' ),
'autocomplete'=>'no'===get_option
('woocommerce_registration_generate_username' )
? 'email' : 'email username',
'priority' => 30, // <============= HERE
);
}
任何帮助,不胜感激。
使用可用的过滤器钩子,您可以在不覆盖核心文件的情况下进行更改...
第一个更改是使用此钩子进行的(对于"IT"国家/地区代码(:
add_filter('woocommerce_get_country_locale', 'custom__country_locale', 30, 1 );
function wps_select_order_meta_keys( $locale ) {
$locale['IT']['postcode']['priority'] = 91;
return $locale;
}
对于第二次更改,您还需要更改类。它与您在另一个问题的答案中已有的代码相同,但没有删除此行:
if( ! is_account_page() ) return $fields;
代码为:
add_filter( 'woocommerce_billing_fields', 'custom_billing_fields', 20, 1 );
function custom_billing_fields( $fields ) {
## ---- 1. Sort billing email and phone fields ---- ##
$fields['billing_email']['priority'] = 30;
$fields['billing_email']['class'] = array('form-row-first');
$fields['billing_phone']['priority'] = 40;
$fields['billing_phone']['class'] = array('form-row-last');
return $fields;
}
因此,如果您从我的其他答案中的代码中删除
if( ! is_account_page() ) return $fields;
,它也可以在结帐页面上工作(如前所述(......
因此,您可以使用(对于帐户和结帐页面(:
add_filter( 'woocommerce_default_address_fields', 'custom_default_address_fields', 20, 1 );
function custom_default_address_fields( $fields ) {
## ---- 1. Remove 'address_2' field ---- ##
unset($fields['address_2']);
## ---- 2. Sort Address fields ---- ##
// Set the order (sorting fields) in the array below
$sorted_fields = array('first_name','last_name','company','address_1','country','postcode','city','state');
$new_fields = array();
$priority = 0;
// Reordering billing and shipping fields
foreach($sorted_fields as $key_field){
$priority += 10;
if( $key_field == 'company' )
$priority += 20; // keep space for email and phone fields
$new_fields[$key_field] = $fields[$key_field];
$new_fields[$key_field]['priority'] = $priority;
}
return $new_fields;
}
代码进入函数.php活动子主题(或活动主题(的文件。经过测试并工作。