web-dev-qa-db-fra.com

Comment réorganiser les champs de facturation dans le modèle WooCommerce Checkout?

Je crée un formulaire de commande de style madlib à l'aide dede WooTheme. Personnalisation des champs de commande à l'aide d'actions et de filtres.

Les champs de facturation dans le modèle de paiement form-billing.php sont affichés avec cet appel:

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

Comment changer l'ordre dans lequel les champs apparaissent?

L'ordre des champs actuel (par défaut) est le suivant:
Prénom
nom de famille
compagnie (caché pour moi)
ville
code postal
pays
Etat
email
téléphone

Ordre par défaut:
screenshot

Je veux que les champs soient dans un ordre plus naturel pour les Américains (où je vis), donc:
Prénom
nom de famille
compagnie (caché pour moi)
ville
Etat
code postal
pays
email
téléphone

Comment puis-je le faire au mieux?

15
torinagrippa

Merci à Dbranes pour la réponse.

Remplacer:

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

Avec:

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

La même chose peut être faite via functions.php dans votre thème (enfant):

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;

}
29
Roy Milder

Vous pouvez faire une copie dans votre thème et éditer le modèle qui restitue le formulaire de commande.

Adapté de la documentation du plugin :

Exemple
Pour remplacer la notification de commande de l'administrateur, copiez: woocommerce/templates/checkout/form-checkout.php
à
yourtheme/woocommerce/checkout/form-checkout.php

[update]

Dans ce fichier, juste avant les champs en cours d'impression, il y a ce crochet d'action: do_action('woocommerce_before_checkout_billing_form', $checkout);.

Il suffit donc d'ajouter cette action dans le functions.php du thème ou dans un plugin personnalisé et de réorganiser les champs de la manière indiquée par le PO dans sa réponse. Pas besoin de remplacer le modèle, ou oui si d'autres personnalisations sont nécessaires.

2
brasofilo