Zurück zum Blog

Was ist der woocommerce_checkout_fields-Filter und seine Anwendungsfälle – WooCommerce

2023-03-123 Min. Lesezeit

woocommerce_checkout_fields ist ein Action-Hook in WooCommerce, der verwendet wird, um die Checkout-Felder auf der Checkout-Seite anzuzeigen und zu ändern. Wenn dieser Hook ausgelöst wird, generiert er ein Array von Checkout-Feldern, die zum Erstellen des Checkout-Formulars verwendet werden.

Dieses Array enthält verschiedene Felder wie Rechnungsdetails, Versanddetails und Bestellnotizen, und jedes Feld wird durch ein Array von Eigenschaften dargestellt. Diese Eigenschaften umfassen das Label des Feldes, den Typ, den Platzhalter, den Standardwert, den erforderlichen Status und mehr.

Standardmäßig werden die Checkout-Felder in einer bestimmten Reihenfolge auf der Checkout-Seite angezeigt. Sie können jedoch die Reihenfolge der Felder, ihre Eigenschaften und ihr Aussehen mithilfe verschiedener Filter ändern, die an diesen Hook angehängt sind.

Sie können beispielsweise den woocommerce_checkout_fields-Hook verwenden, um die Reihenfolge der Felder zu ändern, bestimmte Felder auszublenden, neue Felder hinzuzufügen oder die Eigenschaften vorhandener Felder zu ändern. Sie können mit diesem Hook auch benutzerdefinierte Validierungen zu den Checkout-Feldern hinzufügen.

Anwendungsfälle des woocommerce_checkout_fields-Hooks

Ändern der Reihenfolge der Checkout-Felder

Die Eigenschaft priority bestimmt die Reihenfolge, in der die Felder angezeigt werden. Je höher der Prioritätswert, desto weiter unten erscheint das Feld auf der Checkout-Seite.

/**
 * Ändern der Reihenfolge der Checkout-Felder
 */
function filter_reorder_checkout_fields( $checkout_fields ) {
    $checkout_fields['billing']['billing_phone']['priority'] = 15;
    $checkout_fields['billing']['billing_email']['priority'] = 25;

    return $checkout_fields;
}
add_filter( 'woocommerce_checkout_fields', 'filter_reorder_checkout_fields', 100 );

Im obigen Code-Snippet erhält das Feld billing_phone einen Prioritätswert von 15 und das Feld billing_email einen Prioritätswert von 25. Das bedeutet, dass das Telefonfeld vor dem E-Mail-Feld auf der Checkout-Seite erscheint.

Ändern von Eigenschaften der Checkout-Felder

/**
 * Setzen einer Klasse und des schreibgeschützten Attributs für Checkout-Felder
 */
function filter_reorder_checkout_fields( $checkout_fields ) {
    // Holen Sie sich das aktuelle Benutzerobjekt.
    $current_user = wp_get_current_user();
    // Wenn der aktuelle Benutzer angemeldet ist, erzwingen Sie, dass die E-Mail die E-Mail des aktuellen Benutzers ist
    if ( $current_user->ID ) {
        $checkout_fields['billing']['billing_email']['class'][] = 'hidden-field';
        $checkout_fields['billing']['billing_email']['custom_attributes']   = [ 'readonly' => true ];
    }

    return $checkout_fields;
}
add_filter( 'woocommerce_checkout_fields', 'filter_reorder_checkout_fields', 100 );

Das obige Code-Snippet prüft, ob der aktuelle Benutzer angemeldet ist, indem es die ID-Eigenschaft des aktuellen Benutzerobjekts überprüft. Wenn der Benutzer angemeldet ist, fügt der Code der E-Mail-Rechnungsfeld unter dem Schlüssel „billing“ des Arrays $checkout_fields eine CSS-Klasse namens „hidden-field“ hinzu. Diese Klasse könnte verwendet werden, um das E-Mail-Feld auf der Checkout-Seite auszublenden, damit die E-Mail des Benutzers während des Checkouts nicht geändert werden kann.

Zusätzlich fügt der Code eine Eigenschaft „custom_attributes“ zum Feld „billing_email“ mit dem schreibgeschützten Attribut „true“ hinzu. Dadurch wird das E-Mail-Feld schreibgeschützt, sodass der Benutzer seine E-Mail nicht ändern kann, selbst wenn es ihm gelingt, das Feld anzuzeigen.

Kategorien: