Bagaimana cara memesan ulang bidang penagihan di template WooCommerce Checkout? [Tutup]

15

Saya membuat formulir checkout gaya madlib menggunakan bidang checkout Kustomisasi WooTheme menggunakan tindakan dan filter .

Bidang penagihan dalam templat checkout form-billing.phpditampilkan dengan panggilan ini:

<?php foreach ($checkout->checkout_fields['billing'] as $key => $field) : ?>
<?php woocommerce_form_field( $key, $field, $checkout->get_value( $key ) ); ?>
<?php endforeach; ?>

Bagaimana cara mengubah urutan bidang muncul?

Urutan bidang saat ini (default) adalah:
nama depan nama
belakang
perusahaan perusahaan (disembunyikan untuk saya) telepon email negara
/ kota
kode pos
negara


Pesanan default:
tangkapan layar

Saya ingin ladang berada di urutan yang lebih alami untuk Amerika (di mana saya tinggal), sehingga:
nama depan
nama belakang
perusahaan (tersembunyi bagi saya)
kota / kota
negara
kode pos
negara
email
telepon

Bagaimana saya bisa melakukan ini?

m-torin
sumber

Jawaban:

28

Hal yang sama dapat dilakukan melalui functions.phptema (anak) Anda:

add_filter("woocommerce_checkout_fields", "order_fields");

function order_fields($fields) {

    $order = array(
        "billing_first_name", 
        "billing_last_name", 
        "billing_company", 
        "billing_address_1", 
        "billing_address_2", 
        "billing_postcode", 
        "billing_country", 
        "billing_email", 
        "billing_phone"

    );
    foreach($order as $field)
    {
        $ordered_fields[$field] = $fields["billing"][$field];
    }

    $fields["billing"] = $ordered_fields;
    return $fields;

}
Roy Milder
sumber
Jawaban terbaik karena menggunakan praktik terbaik wp / wc dengan memfilter data sebelum mencapai templat sehingga tidak ada file templat yang harus ditimpa.
Larzan
tidak bekerja untuk saya
Yahya Hussein
Ini digunakan untuk bekerja tetapi tidak lagi. Saya pikir itu karena checkout JS mengubah pesanan secara dinamis.
codekipple
4
Cara saat ini untuk melakukannya adalah dengan menetapkan prioritas: - $fields['billing']['billing_country']['priority'] = 10; $fields['billing']['billing_phone']['priority'] = 20; Lihat di sini https://wordpress.org/support/topic/change-order-of-billing-fields-on-checkout-page/
codekipple
5

Terima kasih kepada Dbranes untuk jawabannya.

Menggantikan:

<?php foreach ($checkout->checkout_fields['billing'] as $key => $field) : ?>
<?php woocommerce_form_field( $key, $field, $checkout->get_value( $key ) ); ?>
<?php endforeach; ?>

Dengan:

<?php 
// order the keys for your custom ordering or delete the ones you don't need
$mybillingfields=array(
    "billing_first_name",
    "billing_last_name",
    "billing_company",
    "billing_address_1",
    "billing_address_2",
    "billing_city",
    "billing_state",
    "billing_postcode",
    "billing_country",
    "billing_email",
    "billing_phone",
);
foreach ($mybillingfields as $key) : ?>
<?php woocommerce_form_field( $key, $checkout->checkout_fields['billing'][$key], $checkout->get_value( $key ) ); ?>
<?php endforeach; ?>
m-torin
sumber
2
kode ini berasal dari fungsi internal Woocommerce. menggunakan kode jawaban pertama [filter] akan jauh lebih baik.
Seperti adeer
Bagi saya itu tidak berhasil. Cara terbaik adalah dengan menggunakan "prioritas" dari setiap bidang, sesuatu seperti ini: $ bidang ['penagihan'] ['billing_country'] ['prioritas'] = 10; $ fields ['billing'] ['billing_phone'] ['priority'] = 20; Mungkin itu karena versi baru Woocommerce, tapi saya tidak tahu.
ruhanbidart
2

Anda dapat menyalin ke tema Anda dan mengedit templat yang membuat formulir checkout.

Diadaptasi dari dokumentasi plugin :

Contoh
Untuk mengabaikan pemberitahuan pesanan admin, salin: woocommerce/templates/checkout/form-checkout.php
ke
yourtheme/woocommerce/checkout/form-checkout.php

[memperbarui]

Dalam file ini, sebelum bidang yang dicetak, ada kait tindakan ini: do_action('woocommerce_before_checkout_billing_form', $checkout);.

Jadi, itu hanya masalah menambahkan tindakan ini di tema functions.phpatau di plugin khusus dan menata ulang bidang seperti yang ditunjukkan OP dalam Jawabannya. Tidak perlu mengganti template, atau ya jika diperlukan penyesuaian lebih lanjut.

brasofilo
sumber
Template yang Anda sebutkan hanya memungkinkan Anda untuk berpindah <?php do_action('woocommerce_checkout_billing'); ?>grosir.
m-torin
Saya seharusnya menyebutkan bahwa saya tidak memeriksa file plugin yang sebenarnya. Jawaban diperbarui dan diperluas berkat jawaban Anda.
brasofilo