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.