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?

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;

}

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

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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.