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

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;

}

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

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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.