Come riordinare i campi di fatturazione nel modello di checkout di WooCommerce? [chiuso]


15

Sto creando un modulo di pagamento in stile madlib utilizzando i campi di pagamento Personalizzazione di WooTheme utilizzando azioni e filtri .

I campi di fatturazione nel modello di pagamento form-billing.phpvengono 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 può cambiare l'ordine in cui compaiono i campi?

L'ordine dei campi corrente (predefinito) è:
nome
cognome
azienda (nascosto per me)
città / città
codice postale
paese
stato
e-mail
telefono

Ordine predefinito:
immagine dello schermo

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

Come posso farlo al meglio?

Risposte:


28

Lo stesso può essere fatto attraverso functions.phpil tema (figlio):

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;

}

Migliore risposta in quanto utilizza la migliore pratica di wp / wc con il filtraggio dei dati prima che raggiunga il modello, quindi non è necessario sovrascrivere alcun file modello.
Larzan,

non ha funzionato per me
Yahya Hussein,

Questo uso funziona ma non lo fa più. Penso che sia perché il checkout JS modifica in modo dinamico l'ordine.
codekipple,

4
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

5

Grazie a Dbranes per la risposta.

Sostituire:

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

Con:

<?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
questo codice proviene da una funzione Woocommerce interna. usare il codice della prima risposta [un filtro] sarebbe molto meglio.
Adeerlike,

Per me non funziona. Il modo migliore è usare la "priorità" di ogni campo, qualcosa del genere: $ 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,

2

È possibile effettuare una copia nel tema e modificare il modello che esegue il rendering del modulo di pagamento.

Adattato dalla documentazione del plug-in :

Esempio
Per sostituire la notifica dell'ordine di amministrazione, copiare: woocommerce/templates/checkout/form-checkout.php
in
yourtheme/woocommerce/checkout/form-checkout.php

[aggiornare]

In questo file, appena prima che i campi in fase di stampa, c'è questo gancio azione: do_action('woocommerce_before_checkout_billing_form', $checkout);.

Quindi, si tratta solo di aggiungere questa azione nel tema functions.phpo in un plug-in personalizzato e riordinare i campi come mostra l'OP nella sua risposta. Non è necessario sovrascrivere il modello o sì se sono necessarie ulteriori personalizzazioni.


Il modello che hai citato ti consente solo di spostarti <?php do_action('woocommerce_checkout_billing'); ?>all'ingrosso.
m-torin,

Avrei dovuto menzionare che non ho controllato i file dei plugin attuali. Risposta aggiornata ed espansa grazie alla tua risposta.
brasofilo,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.