gpt4 book ai didi

php - 根据国家/地区对特定 Woocommerce 结帐字段的排序优先级

转载 作者:行者123 更新时间:2023-12-04 14:24:03 27 4
gpt4 key购买 nike

在 Woocommerce 中,我需要在结帐页面上设置三个字段的默认排序优先级(排序):

第一个变化取决于'IT'国家代码的选择:

  • 邮政编码 - 'priority' => 91,

另外两个是无条件的,我只需要设置默认优先级即可:

  • billing_email - 'priority' => 30,
  • billing_phone - 'priority' => 40,

通过直接编辑文件,class-wc-countries.php核心文件如下所示,我得到了我需要的东西。但很明显,每次更新插件时,我都会丢失更改。

现在我正在寻找一个钩子(Hook)来以干净的方式完成这项工作。

class-wc-countries.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
);
}

感谢任何帮助。

最佳答案

使用可用的过滤器 Hook ,您可以在不覆盖核心文件的情况下进行更改……

第一个更改是使用此 Hook (针对“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;
}

So if you remove if( ! is_account_page() ) return $fields; from the code in my other answer, it will work also on checkout page (as as already indicated)…

因此您可以使用(用于帐户和结帐页面):

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;
}

代码进入事件子主题(或事件主题)的 function.php 文件。经过测试并有效。

关于php - 根据国家/地区对特定 Woocommerce 结帐字段的排序优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49658749/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com