Php WooCommerce签出邮政编码字段顺序
我正在尝试修改签出页面。使用一个插件,我可以用街道、门牌号和“额外”字段替换两个默认地址行(它们都在一行上)。下面是邮政编码和城市字段Php WooCommerce签出邮政编码字段顺序,php,wordpress,woocommerce,checkout,form-fields,Php,Wordpress,Woocommerce,Checkout,Form Fields,我正在尝试修改签出页面。使用一个插件,我可以用街道、门牌号和“额外”字段替换两个默认地址行(它们都在一行上)。下面是邮政编码和城市字段但是,我想在用户输入他们的邮政编码和门牌号时生成街道和城市,因此我想切换字段是这样的: 街道-门牌号-额外 邮政编码-城市 我希望它是: 邮政编码-小时数-额外 街头城市 我用的是普通钩子: add_filter("woocommerce_checkout_fields", "order_fields"); function order_fields($fiel
但是,我想在用户输入他们的邮政编码和门牌号时生成街道和城市,因此我想切换字段
是这样的: 街道-门牌号-额外
邮政编码-城市 我希望它是: 邮政编码-小时数-额外
街头城市 我用的是普通钩子:
add_filter("woocommerce_checkout_fields", "order_fields");
function order_fields($fields) {
$order = array(
"billing_first_name",
"billing_last_name",
"billing_company",
"billing_street",
"billing_house_number",
"billing_house_number_extra",
"billing_postcode",
"billing_city",
"billing_country",
"billing_email",
"billing_phone"
);
foreach($order as $field)
{
$ordered_fields[$field] = $fields["billing"][$field];
}
$fields["billing"] = $ordered_fields;
return $fields;
}
然而。。。尝试移动邮政编码字段失败。如果我将“邮政编码”和“城市”字段一起移动,我就可以移动它们,但仅尝试将“邮政编码”字段单独移动会显示奇怪的行为(例如:切换“街道”和“邮政编码”字段)
我错过了什么?这将很难。这是因为输入的类别 首先,你必须这样做:
add_filter("woocommerce_checkout_fields", "order_fields");
function order_fields($fields) {
$order = array(
"billing_first_name" => [],
"billing_last_name" => [],
"billing_company" => [],
"billing_street" => [],
"billing_postcode" => ["custom-css"],
"billing_house_number" => [],
"billing_house_number_extra" => [],
"billing_city" => [],
"billing_country" => [],
"billing_email" => [],
"billing_phone" => []
);
foreach($order as $key => $class)
{
$field = $fields["billing"][$key];
if(sizeof($class) > 0){
$field['class'] = $class;
}
$ordered_fields[$key] = $field;
}
$fields["billing"] = $ordered_fields;
return $fields;
}
然后,您必须找到一种方法来覆盖WooCommerce address-i18nJS或编写自己的js
问题是表单行第一个表单行最后一个
类在输入中添加了一些浮点值,正如@XciD所说的,问题不在于实际的字段排序,因为您的woocommerce\u checkout\u字段
钩子重新排序是可以的。问题在于WooCommerce的排队address-i18n.js
脚本,它会检查您商店的区域设置,并根据该设置动态重新排序结帐(和帐户地址)字段(这很烦人,表面上是给了您一个钩子,让您一开始就重新排序……)
警告
不幸的是,没有非常简单的方法来解决这个问题;我最终得到了一个相当粗糙的内联jQuery shiv,将字段移回到我最初设置的顺序;然而,值得注意的是,WooCommerce团队可能会完全失败,所以我不知道这会持续多久
说了这么一句:继续干吧
function vnmTheme_addressFieldsOverride() {
if (is_wc_endpoint_url('edit-address') || is_checkout()) {
?>
<script>
jQuery(document).ready(function($) {
$(document.body).on('country_to_state_changing', function(event, country, wrapper) {
var $postcodeField = wrapper.find('#billing_postcode_field, #shipping_postcode_field');
var $housenoField = wrapper.find('#billing_house_number_field, #shipping_house_number_field' );
var fieldTimeout = setTimeout(function() {
$postcodeField.insertBefore($housenoField);
}, 50);
});
});
</script>
<?php
}
}
add_action('wp_footer', 'vnmTheme_addressFieldsOverride', 999);
函数vnmTheme\u addressFieldsOverride(){
if(is_wc_endpoint_url('edit-address')| | is_checkout()){
?>
jQuery(文档).ready(函数($){
$(document.body).on('country\u to\u state\u changing',函数(事件、国家、包装器){
var$postcodeField=wrapper.find(“#账单#postcode#field,#发货#postcode#field”);
var$housenoField=wrapper.find(“#账单#房屋(编号)字段,#发货(房屋)房屋(编号)字段”);
var fieldTimeout=setTimeout(函数(){
$postcodeField.insertBefore($housenoField);
}, 50);
});
});
值得注意的是,我尝试了几次包含某种jQuery shiv的尝试,以绕过
address-l18n.js
正在做的事情(总结如下:),但没有取得任何进展。这……令人沮丧。如果我有任何进展,我会将其包括在这里。