Wie ordne ich Rechnungsfelder in der WooCommerce Checkout-Vorlage neu an? [geschlossen]

15

Ich erstelle ein Auscheckformular im Madlib-Stil mithilfe der Anpassen-Auscheckfelder von WooTheme mit Aktionen und Filtern .

Abrechnungsfelder in der Checkout-Vorlage form-billing.phpwerden bei diesem Aufruf angezeigt:

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

Wie kann die Reihenfolge der Felder geändert werden?

Die aktuelle (Standard-) Feldreihenfolge lautet:
Vorname
Nachname
Firma (für mich verborgen)
Ort
Postleitzahl
Land
Bundesland
E
- Mail Telefon

Standardbestellung:
Bildschirmfoto

Ich möchte, dass die Felder für Amerikaner (wo ich wohne) natürlicher angeordnet sind, also:
Vorname
Nachname
Firma (für mich verborgen)
Ort / Stadt
Bundesland
Postleitzahl
Land
E
- Mail - Adresse Telefon

Wie kann ich das am besten machen?

m-torin
quelle

Antworten:

28

Das Gleiche können Sie functions.phpin Ihrem (Kinder-) Thema tun :

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
quelle
Beste Antwort, da es die bewährte Methode wp / wc zum Filtern der Daten verwendet, bevor sie die Vorlage erreichen, sodass keine Vorlagendatei überschrieben werden muss.
Larzan
hat bei mir nicht funktioniert
Yahya Hussein
Diese Verwendung funktioniert aber nicht mehr. Ich denke, es ist, weil die Kasse JS die Reihenfolge dynamisch ändert.
Codekipple
4
Die derzeitige Möglichkeit besteht darin, eine Priorität zuzuweisen: - $fields['billing']['billing_country']['priority'] = 10; $fields['billing']['billing_phone']['priority'] = 20; Siehe hier https://wordpress.org/support/topic/change-order-of-billing-fields-on-checkout-page/
codekipple
5

Vielen Dank an Dbranes für die Antwort.

Ersetzen:

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

Mit:

<?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
quelle
2
Dieser Code stammt aus einer internen Woocommerce-Funktion. Es wäre viel besser, den Code der ersten Antwort [einen Filter] zu verwenden.
Adeerlike
Bei mir klappt es nicht. Der beste Weg ist, die "Priorität" jedes Feldes wie folgt zu verwenden: $ fields ['billing'] ['billing_country'] ['priority'] = 10; $ fields ['billing'] ['billing_phone'] ['priority'] = 20; Vielleicht liegt es an neuen Versionen von Woocommerce, aber ich weiß es nicht.
Ruhanbidart
2

Sie können eine Kopie in Ihr Design einfügen und die Vorlage bearbeiten, die das Checkout-Formular darstellt.

Angepasst aus der Plugin-Dokumentation :

Beispiel
Um die Administratorbestellbenachrichtigung zu überschreiben, kopieren Sie: woocommerce/templates/checkout/form-checkout.php
nach
yourtheme/woocommerce/checkout/form-checkout.php

[aktualisieren]

In dieser Datei gibt es, kurz bevor die Felder gedruckt werden, diesen Aktions-Hook: do_action('woocommerce_before_checkout_billing_form', $checkout); .

Es geht also nur darum, diese Aktion in das Thema aufzunehmen functions.php oder in ein benutzerdefiniertes Plugin einzufügen und die Felder neu anzuordnen, wie das OP in seiner Antwort zeigt. Keine Notwendigkeit, die Vorlage zu überschreiben, oder ja, wenn weitere Anpassungen erforderlich sind.

Brasofilo
quelle
Mit der von Ihnen erwähnten Vorlage können Sie sich nur im <?php do_action('woocommerce_checkout_billing'); ?>Großhandel bewegen .
m-torin
Ich hätte erwähnen sollen, dass ich die aktuellen Plugin-Dateien nicht überprüft habe. Antwort aktualisiert und erweitert dank Ihrer Antwort.
Brasofilo