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?

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;

}

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

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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.