Jak zmienić kolejność pól rozliczeniowych w szablonie WooCommerce Checkout? [Zamknięte]

15

Tworzę formularz kasy w stylu madlib przy użyciu dostosowywania pól kasy w WooTheme za pomocą akcji i filtrów .

W form-billing.phpprzypadku tego połączenia wyświetlane są pola rozliczeniowe w szablonie kasy :

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

Jak zmienić kolejność pojawiania się pól?

Kolejność prądu (domyślnie) pole jest:
imię
nazwisko
firma (ukryty dla mnie)
miasto / miasto
kod pocztowy
kraj
stan
e-mail
telefon

Domyślne zamówienie:
zrzut ekranu

Chcę odpowiednie pola, aby być bardziej naturalnego porządku dla Amerykanów (gdzie mieszkam), więc:
imię
nazwisko
firma (ukryty dla mnie)
miasto / miasto
stan
kod pocztowy
kraj
email
telefon

Jak najlepiej to zrobić?

m-torin
źródło

Odpowiedzi:

28

To samo można zrobić functions.phpw motywie (podrzędnym):

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
źródło
Najlepsza odpowiedź, ponieważ wykorzystuje najlepszą praktykę wp / wc z filtrowaniem danych przed dotarciem do szablonu, więc nie trzeba zastępować pliku szablonu.
Larzan
nie działało dla mnie
Yahya Hussein
To zastosowanie działa, ale już nie działa. Myślę, że dzieje się tak, ponieważ kasa JS dynamicznie zmienia kolejność.
codekipple
4
Obecny sposób to przypisać priorytet: - $fields['billing']['billing_country']['priority'] = 10; $fields['billing']['billing_phone']['priority'] = 20; Zobacz tutaj https://wordpress.org/support/topic/change-order-of-billing-fields-on-checkout-page/
codekipple
5

Dzięki Dbranes za odpowiedź.

Zastąpić:

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

Z:

<?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
źródło
2
ten kod pochodzi z wewnętrznej funkcji Woocommerce. użycie kodu pierwszej odpowiedzi [filtra] byłoby znacznie lepsze.
Adeerlike
Dla mnie to nie działa. Najlepszym sposobem jest użycie „priorytetu” każdego pola, mniej więcej tak: $ fields ['billing'] ['billing_country'] ['priorytet'] = 10; $ fields ['billing'] ['billing_phone'] ['Priority'] = 20; Może to z powodu nowych wersji Woocommerce, ale nie wiem.
ruhanbidart
2

Możesz zrobić kopię do swojego motywu i edytować szablon, który wyświetla formularz kasy.

Na podstawie dokumentacji wtyczki :

Przykład
Aby pominąć powiadomienie o poleceniu administratora, skopiuj: woocommerce/templates/checkout/form-checkout.php
do
yourtheme/woocommerce/checkout/form-checkout.php

[aktualizacja]

W tym pliku, tuż przed pola jest drukowana, jest to hak działanie: do_action('woocommerce_before_checkout_billing_form', $checkout);.

Tak więc wystarczy dodać tę akcję do motywu functions.phplub niestandardowej wtyczki i zmienić kolejność pól, tak jak OP pokazuje w odpowiedzi. Nie ma potrzeby zastępowania szablonu lub tak, jeśli konieczne są dalsze dostosowania.

brasofilo
źródło
Wspomniany szablon pozwala tylko na <?php do_action('woocommerce_checkout_billing'); ?>hurtowe przemieszczanie się.
m-torin
Powinienem wspomnieć, że nie sprawdziłem rzeczywistych plików wtyczek. Odpowiedź zaktualizowana i rozszerzona dzięki swojej odpowiedzi.
brasofilo