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:
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?
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; ?>
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;
}
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.