Cum se reordonează câmpurile de facturare în șablonul WooCommerce Checkout?

5 ian. 2013, 18:45:32
Vizualizări: 63.7K
Voturi: 15

Creez un formular de checkout în stil madlib folosind Personalizarea câmpurilor de checkout folosind acțiuni și filtre de la WooTheme.

Câmpurile de facturare din șablonul checkout form-billing.php sunt afișate cu această comandă:

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

Cum pot schimba ordinea în care apar câmpurile?

Ordinea actuală (implicită) a câmpurilor este:
prenume
nume
companie (ascuns pentru mine)
oraș
cod poștal
țară
județ
email
telefon

Ordinea implicită:
Captură de ecran care arată ordinea implicită a câmpurilor de facturare în WooCommerce

Vreau ca câmpurile să fie într-o ordine mai naturală pentru americani (unde locuiesc), așa că:
prenume
nume
companie (ascuns pentru mine)
oraș
județ
cod poștal
țară
email
telefon

Care este cea mai bună modalitate de a face acest lucru?

0
Toate răspunsurile la întrebare 3
4
31

Același lucru poate fi realizat prin fișierul functions.php din tema (child) ta:

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 dec. 2013 22:10:01
Comentarii

Cel mai bun răspuns, deoarece utilizează cea mai bună practică WordPress/WooCommerce prin filtrarea datelor înainte ca acestea să ajungă în șablon, astfel încât niciun fișier de șablon nu trebuie suprascris.

Larzan Larzan
22 aug. 2016 18:19:27

nu a funcționat pentru mine

Yahya Hussein Yahya Hussein
12 iul. 2017 05:33:16

Această metodă funcționa înainte, dar acum nu mai funcționează. Cred că este din cauză că JavaScript-ul de checkout modifică dinamic comanda.

codekipple codekipple
28 iul. 2017 18:43:48

Modul actual de a face acest lucru este prin atribuirea unei priorități:- $fields['billing']['billing_country']['priority'] = 10; $fields['billing']['billing_phone']['priority'] = 20;

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

codekipple codekipple
28 iul. 2017 18:47:01
2

Mulțumiri lui Dbranes pentru răspuns.

Înlocuiește:

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

Cu:

<?php 
// ordonează cheile pentru ordonarea personalizată sau elimină cele de care nu ai nevoie
$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 ian. 2013 15:38:57
Comentarii

acest cod provine dintr-o funcție internă Woocommerce. utilizarea codului din primul răspuns [un filtru] ar fi mult mai bună.

Adeerlike Adeerlike
5 nov. 2015 18:59:23

Pentru mine nu funcționează. Cea mai bună metodă este să folosești "priority" pentru fiecare câmp, ceva de genul:

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

Poate se datorează noilor versiuni de Woocommerce, dar nu sunt sigur.

ruhanbidart ruhanbidart
17 apr. 2018 01:14:08
2

Puteți face o copie în tema dumneavoastră și editați șablonul care afișează formularul de finalizare a comenzii.

Adaptat din documentația plugin-ului:

Exemplu
Pentru a suprascrie notificarea de comandă din admin, copiați: woocommerce/templates/checkout/form-checkout.php
în
yourtheme/woocommerce/checkout/form-checkout.php

[actualizare]

În acest fișier, chiar înainte ca câmpurile să fie afișate, există acest cârlig de acțiune: do_action('woocommerce_before_checkout_billing_form', $checkout);.

Deci, este suficient să adăugați această acțiune în fișierul functions.php al temei sau într-un plugin personalizat și să reordonați câmpurile așa cum arată OP în răspunsul său. Nu este nevoie să suprascrieți șablonul, decât dacă sunt necesare alte personalizări suplimentare.

5 ian. 2013 23:54:22
Comentarii

Șablonul menționat îți permite doar să muți <?php do_action('woocommerce_checkout_billing'); ?> în întregime.

MTT MTT
6 ian. 2013 15:30:13

Trebuia să menționez că nu am verificat fișierele efective ale plugin-ului. Răspunsul a fost actualizat și extins datorită răspunsului tău.

brasofilo brasofilo
6 ian. 2013 15:54:06