Comment réorganiser les champs de facturation dans le modèle de paiement WooCommerce? [fermé]

15

Je crée un formulaire de paiement de style madlib en utilisant les champs de paiement de personnalisation de WooTheme en utilisant des actions et des filtres .

Les champs de facturation du modèle de paiement form-billing.phps'affichent 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 d'affichage des champs?

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

Ordre par défaut:
capture d'écran

Je veux que les champs soient dans un ordre plus naturel pour les Américains (où j'habite), donc:
prénom
nom de famille
société (caché pour moi)
ville / ville
état
code postal
pays
email
téléphone

Comment puis-je le faire au mieux?

m-torin
la source

Réponses:

28

Vous pouvez faire de même functions.phpdans 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;

}
Roy Milder
la source
Meilleure réponse car il utilise la meilleure pratique wp / wc avec le filtrage des données avant qu'elles n'atteignent le modèle, de sorte qu'aucun fichier de modèle ne doit être remplacé.
Larzan
n'a pas fonctionné pour moi
Yahya Hussein
Cette utilisation fonctionne mais ne fonctionne plus. Je pense que c'est parce que la caisse JS modifie dynamiquement la commande.
codekipple
4
La manière actuelle de le faire est d'attribuer une priorité: - $fields['billing']['billing_country']['priority'] = 10; $fields['billing']['billing_phone']['priority'] = 20; Voir ici https://wordpress.org/support/topic/change-order-of-billing-fields-on-checkout-page/
codekipple le
5

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; ?>
m-torin
la source
2
ce code provient d'une fonction interne de Woocommerce. utiliser le code de la première réponse [un filtre] serait bien mieux.
Adelike
Pour moi ça ne marche pas. La meilleure façon est d'utiliser la "priorité" de chaque champ, quelque chose comme ceci: $ fields ['billing'] ['billing_country'] ['priority'] = 10; $ fields ['billing'] ['billing_phone'] ['priority'] = 20; C'est peut-être à cause des nouvelles versions de Woocommerce, mais je ne sais pas.
ruhanbidart
2

Vous pouvez en faire une copie dans votre thème et modifier le modèle qui rend le formulaire de paiement.

Adapté de la documentation du plugin :

Exemple
Pour ignorer la notification de commande administrateur, copiez: woocommerce/templates/checkout/form-checkout.php
vers
yourtheme/woocommerce/checkout/form-checkout.php

[mise à jour]

Dans ce fichier, juste avant que 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 thème functions.phpou dans un plugin personnalisé et de réorganiser les champs comme l'OP le montre dans sa réponse. Pas besoin de remplacer le modèle, ou oui si d'autres personnalisations sont nécessaires.

brasofilo
la source
Le modèle que vous avez mentionné vous permet uniquement de vous déplacer en <?php do_action('woocommerce_checkout_billing'); ?>gros.
m-torin
J'aurais dû mentionner que je n'ai pas vérifié les fichiers de plugins réels. Réponse mise à jour et développée grâce à votre réponse.
brasofilo