Come riordinare i campi di fatturazione nel template del checkout WooCommerce?

5 gen 2013, 18:45:32
Visualizzazioni: 63.7K
Voti: 15

Sto creando un modulo di checkout in stile madlib utilizzando la guida di WooTheme Personalizzazione dei campi del checkout usando actions e filters.

I campi di fatturazione nel template checkout form-billing.php vengono visualizzati con questa chiamata:

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

Come posso modificare l'ordine di apparizione dei campi?

L'ordine attuale (predefinito) dei campi è:
nome
cognome
azienda (nascosto per me)
città
CAP
paese
stato/provincia
email
telefono

Ordine predefinito:
Screenshot dell'ordine predefinito dei campi di fatturazione WooCommerce

Voglio che i campi siano in un ordine più naturale per gli americani (dove vivo), quindi:
nome
cognome
azienda (nascosto per me)
città
stato/provincia
CAP
paese
email
telefono

Qual è il modo migliore per farlo?

0
Tutte le risposte alla domanda 3
4
31

Lo stesso può essere fatto tramite il file functions.php del tuo tema (child):

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;

}
23 dic 2013 22:10:01
Commenti

Miglior risposta in quanto utilizza la miglior pratica di wp/wc filtrando i dati prima che raggiungano il template, quindi non è necessario sovrascrivere alcun file di template.

Larzan Larzan
22 ago 2016 18:19:27

non ha funzionato per me

Yahya Hussein Yahya Hussein
12 lug 2017 05:33:16

Funzionava in passato ma ora non più. Penso sia perché il JS del checkout modifica dinamicamente l'ordine.

codekipple codekipple
28 lug 2017 18:43:48

Il modo attuale per farlo è assegnare una priorità:- $fields['billing']['billing_country']['priority'] = 10; $fields['billing']['billing_phone']['priority'] = 20;

Vedi qui https://wordpress.org/support/topic/change-order-of-billing-fields-on-checkout-page/

codekipple codekipple
28 lug 2017 18:47:01
2

Grazie a Dbranes per la risposta.

Sostituisci:

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

Con:

<?php 
// ordina le chiavi per il tuo ordinamento personalizzato o elimina quelle che non ti servono
$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; ?>
6 gen 2013 15:38:57
Commenti

questo codice proviene da una funzione interna di WooCommerce. utilizzare il codice della prima risposta [un filtro] sarebbe molto meglio.

Adeerlike Adeerlike
5 nov 2015 18:59:23

Per me non funziona. Il modo migliore è usare la "priority" di ogni campo, qualcosa come:

$fields['billing']['billing_country']['priority'] = 10; $fields['billing']['billing_phone']['priority'] = 20;

Forse è a causa delle nuove versioni di WooCommerce, ma non lo so.

ruhanbidart ruhanbidart
17 apr 2018 01:14:08
2

Puoi fare una copia nel tuo tema e modificare il template che genera il modulo di checkout.

Adattato dalla documentazione del plugin:

Esempio
Per sovrascrivere la notifica d'ordine nell'admin, copia: woocommerce/templates/checkout/form-checkout.php
in
yourtheme/woocommerce/checkout/form-checkout.php

[aggiornamento]

In questo file, appena prima che i campi vengano stampati, c'è questo action hook: do_action('woocommerce_before_checkout_billing_form', $checkout);.

Quindi, basta aggiungere questa azione nel functions.php del tema o in un plugin personalizzato e riordinare i campi come mostrato nella risposta dell'OP. Non è necessario sovrascrivere il template, a meno che non siano necessarie ulteriori personalizzazioni.

5 gen 2013 23:54:22
Commenti

Il modello che hai menzionato ti consente solo di spostare <?php do_action('woocommerce_checkout_billing'); ?> in blocco.

MTT MTT
6 gen 2013 15:30:13

Avrei dovuto specificare che non ho controllato i file effettivi del plugin. Risposta aggiornata e ampliata grazie al tuo contributo.

brasofilo brasofilo
6 gen 2013 15:54:06