重新排序Woocommerce结账领域
我试图重新排序结帐页面,但一切我都试过至今没有工作的计费领域:重新排序Woocommerce结账领域
这是目前我想摘录:
add_filter("woocommerce_checkout_fields", "order_fields");
function order_fields($fields) {
$order = array(
"billing_first_name",
"billing_last_name",
"billing_country",
"billing_state",
"billing_address_1",
"billing_address_2",
"billing_email",
"billing_phone"
);
foreach($order as $field) {
$ordered_fields[$field] = $fields["billing"][$field];
}
$fields["billing"] = $ordered_fields;
return $fields;
}
是否可以重写此片段,因为它曾经为我工作?
您使用不再有效(因为WooCommerce 3.0.4 - link to github issue here)的方法。这不完全是一个错误,而是一个规范的变化。
要解决这个问题,您只需调整每个字段的优先级以适合您所需的顺序。
add_filter("woocommerce_checkout_fields", "custom_override_checkout_fields", 1);
function custom_override_checkout_fields($fields) {
$fields['billing']['billing_first_name']['priority'] = 1;
$fields['billing']['billing_last_name']['priority'] = 2;
$fields['billing']['billing_company']['priority'] = 3;
$fields['billing']['billing_country']['priority'] = 4;
$fields['billing']['billing_state']['priority'] = 5;
$fields['billing']['billing_address_1']['priority'] = 6;
$fields['billing']['billing_address_2']['priority'] = 7;
$fields['billing']['billing_city']['priority'] = 8;
$fields['billing']['billing_postcode']['priority'] = 9;
$fields['billing']['billing_email']['priority'] = 10;
$fields['billing']['billing_phone']['priority'] = 11;
return $fields;
}
add_filter('woocommerce_default_address_fields', 'custom_override_default_locale_fields');
function custom_override_default_locale_fields($fields) {
$fields['state']['priority'] = 5;
$fields['address_1']['priority'] = 6;
$fields['address_2']['priority'] = 7;
return $fields;
}
请注意,它不是代码中按顺序调整布局的行,而是分配给该字段的优先级。在这种情况下,我将['billing_state']
优先级更改为5
,它在['billing_country']
之后和['billing_address_1']
之前为(,在本示例中为)。
编辑:
按照该意见,这是不工作由于某种原因(它的工作对我的第一次测试WooCommerce安装,但我设法得到它改变了存储位置后失败)。
经过一番挖掘,我发现默认的语言环境设置得到应用覆盖顶部(不知道该怎么解释,但裸露与我)。
我设法得到一个安装运行在上面的代码不工作,并设法通过加入以下代码,以及解决它:
add_filter('woocommerce_default_address_fields', 'custom_override_default_locale_fields');
function custom_override_default_locale_fields($fields) {
$fields['state']['priority'] = 5;
$fields['address_1']['priority'] = 6;
$fields['address_2']['priority'] = 7;
return $fields;
}
我已经添加了额外的代码段的第一个代码块验证整个块。
要更改woocommerce结帐字段,还需要更改字段顺序和所需的类别显示。你可以在functions.php中添加下面的代码,它可以工作。
add_filter("woocommerce_checkout_fields", "woocommerce_reorder_checkout_fields", 9999);
if (! function_exists('woocommerce_reorder_checkout_fields')) {
function woocommerce_reorder_checkout_fields($fields) {
/* To reorder state field you need to add this array. */
$order = array(
"billing_first_name",
"billing_last_name",
"billing_country",
"billing_state",
"billing_address_1",
"billing_address_2",
"billing_email",
"billing_phone"
);
foreach($order as $field) {
$ordered_fields[$field] = $fields["billing"][$field];
}
$fields["billing"] = $ordered_fields;
/* To change email and phone number you have to add only class no need to add priority. */
$fields['billing']['billing_email']['class'][0] = 'form-row-first';
$fields['billing']['billing_phone']['class'][0] = 'form-row-last';
return $fields;
}
}
见附表图像 欲了解更多信息请检查该link
他们固定使用类和优先级的问题是造型!不订购! –
是的,使用优先级,你可以改变显示顺序,所以我更新我的答案 –
没有为我工作 –
排序(排序)在address-i18n.min.js上工作,而不是在php代码中。
就我而言,我做错了什么事在我的js代码。所以,排序不好(JavaScript停在那里)。
请检查dev控制台和js错误。
而这是只改变优先级的php代码。
function rpf_edit_default_address_fields($fields) {
/* ------ reordering ------ */
$fields['country']['priority'] = 10;
$fields['first_name']['priority'] = 20;
$fields['last_name']['priority'] = 30;
$fields['address_1']['priority'] = 40;
$fields['address_2']['priority'] = 50;
$fields['city']['priority'] = 60;
$fields['state']['priority'] = 70;
$fields['postcode']['priority'] = 80;
return $fields;
}
add_filter('woocommerce_default_address_fields', 'rpf_edit_default_address_fields', 100, 1);
祝你好运!
$ fields ['billing'] ['billing_first_name'] [ 'priority'] = 1; $ fields ['billing'] ['billing_last_name'] ['priority'] = 2; $ fields ['billing'] ['billing_country'] ['priority'] = 3; $ fields ['billing'] ['billing_state'] ['priority'] = 4; $ fields ['billing'] ['billing_address_1'] ['priority'] = 5; $ fields ['billing'] ['billing_address_2'] ['priority'] = 6; $ fields ['billing'] ['billing_phone'] ['priority'] = 7; $ fields ['billing'] ['billing_email'] ['priority'] = 8; - 这是显示字段按以下顺序,名字,最后,国家,电话,邮件,地址1,地址2,状态 –
@YahyaHussein有可能是有另一个功能做同样的事情(无论是在你的主题文件,或另一个插件)。我的建议是将过滤器的优先级调整为像add_filter(“woocommerce_checkout_fields”,“custom_override_checkout_fields”,999);'以便它运行__after__任何潜在的重复功能。 – Frits
似乎应该工作,但它不工作 –