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
正在做的事情(总结如下:),但没有取得任何进展。这……令人沮丧。如果我有任何进展,我会将其包括在这里。