Dynamische WooCommerce-Billing- und Shipping-Tags einfach in Bricks integrieren


Mit dem Bricks Builder lassen sich Inhalte in WordPress flexibel und performant gestalten. Doch sobald es um dynamische Kundendaten aus WooCommerce geht – wie Rechnungsadressen oder Lieferinformationen – fehlt oft eine native Lösung. Genau hier setzt dieser Beitrag an: Du erfährst, wie du eigene Dynamic Tags für WooCommerce-Benutzerdaten entwickelst und diese direkt in Bricks-Elementen verwendest – ideal für personalisierte Inhalte, PDFs oder Kundenbereiche.

Ziel: Benutzerbezogene Daten in Bricks nutzen



Ziel ist es, dass du Platzhalter wie {billing_first_name} oder {shipping_city} direkt in Bricks einfügen kannst – und Bricks diese je nach eingeloggtem Benutzer automatisch mit den passenden WooCommerce-Daten ersetzt.


Beispielhafte Anwendung:

Vielen Dank, {billing_first_name}! Ihre Bestellung wird an {shipping_address_1}, {shipping_postcode} {shipping_city} versendet.

Voraussetzungen

  • Bricks Builder
  • WooCommerce
  • WPCodeBox (als Affiliate-Empfehlung: WPCodeBox Plugin) oder direkt in die function.php


WPCodeBox ist hier ideal, um den benötigten PHP-Code modular und updatesicher zu verwalten – ganz ohne Änderungen an der functions.php.

Umsetzung: Registrieren eigener Dynamic Tags


Über den Hook bricks/dynamic_tags_list registrierst du eigene Tags, gruppiert z. B. unter „WooCommerce User“. Diese Tags geben auf Basis des eingeloggten Benutzers die zugehörigen Felder aus.

Code:

add_filter( 'bricks/dynamic_tags_list', 'woo_register_tags' );
function woo_register_tags( $tags ) {

    /* WooCommerce invoice*/

    $tags[] = [
        'name'  => '{woo_billing_first_name}',
        'label' => 'Rechnung Vorname',
        'group' => 'Woo Account',
    ];

    $tags[] = [
        'name'  => '{woo_billing_last_name}',
        'label' => 'Rechnung Nachname',
        'group' => 'Woo Account',
    ];

    $tags[] = [
        'name'  => '{woo_billing_email}',
        'label' => 'Rechnung E-Mail',
        'group' => 'Woo Account',
    ];
    $tags[] = [
        'name'  => '{woo_billing_phone}',
        'label' => 'Rechnung Telefon',
        'group' => 'Woo Account',
    ];
    $tags[] = [
        'name'  => '{woo_billing_company}',
        'label' => 'Rechnung Firma',
        'group' => 'Woo Account',
    ];
    $tags[] = [
        'name'  => '{woo_billing_address_1}',
        'label' => 'Rechnung Adresse',
        'group' => 'Woo Account',
    ];
    $tags[] = [
        'name'  => '{woo_billing_postcode}',
        'label' => 'Rechnung PLZ',
        'group' => 'Woo Account',
    ];
    $tags[] = [
        'name'  => '{woo_billing_city}',
        'label' => 'Rechnung Ort',
        'group' => 'Woo Account',
    ];
    $tags[] = [
        'name'  => '{woo_billing_country}',
        'label' => 'Rechnung Land',
        'group' => 'Woo Account',
    ];

    /* WooCommerce shipping*/

    $tags[] = [
        'name'  => '{woo_shipping_first_name}',
        'label' => 'Lieferadresse Vorname',
        'group' => 'Woo Account',
    ];

    $tags[] = [
        'name'  => '{woo_shipping_last_name}',
        'label' => 'Lieferadresse Nachname',
        'group' => 'Woo Account',
    ];

    $tags[] = [
        'name'  => '{woo_shipping_company}',
        'label' => 'Lieferadresse Firma',
        'group' => 'Woo Account',
    ];
    $tags[] = [
        'name'  => '{woo_shipping_address_1}',
        'label' => 'Lieferadresse Adresse',
        'group' => 'Woo Account',
    ];
    $tags[] = [
        'name'  => '{woo_shipping_postcode}',
        'label' => 'Lieferadresse PLZ',
        'group' => 'Woo Account',
    ];
    $tags[] = [
        'name'  => '{woo_shipping_city}',
        'label' => 'Lieferadresse Ort',
        'group' => 'Woo Account',
    ];
    $tags[] = [
        'name'  => '{woo_shipping_country}',
        'label' => 'Lieferadresse Land',
        'group' => 'Woo Account',
    ];

    return $tags;
}

/* Woo Account Tags */
add_filter( 'bricks/dynamic_data/render_tag', 'woo_render_woo_account_tag', 20, 3 );

function woo_render_woo_account_tag( $tag, $post, $context = 'text' ) {
    if ( ! is_string( $tag ) ) {
        return $tag;
    }

    $clean_tag = trim($tag, '{}');

    $allowed_tags = [
        'woo_billing_first_name'   =>  'billing_first_name',
        'woo_billing_last_name'    =>  'billing_last_name',
        'woo_billing_email'        =>  'billing_email',
        'woo_billing_company'      =>  'billing_company',
        'woo_billing_address_1'    =>  'billing_address_1',
        'woo_billing_postcode'     =>  'billing_postcode',
        'woo_billing_city'         =>  'billing_city',
        'woo_billing_country'      =>  'billing_country',
        'woo_billing_phone'        =>  'billing_phone',
        'woo_shipping_first_name'   =>  'shipping_first_name',
        'woo_shipping_last_name'    =>  'shipping_last_name',
        'woo_shipping_company'      =>  'shipping_company',
        'woo_shipping_address_1'    =>  'shipping_address_1',
        'woo_shipping_postcode'     =>  'shipping_postcode',
        'woo_shipping_city'         =>  'shipping_city',
        'woo_shipping_country'      =>  'shipping_country',
    ];

     if ( ! isset( $allowed_tags[ $clean_tag ] ) ) {
        return $tag;
    }

    $user_id = get_current_user_id();
    if ( ! $user_id ) {
        return '';
    }

    $meta_key = $allowed_tags[ $clean_tag ];
    $value = get_user_meta( $user_id, $meta_key, true );

    // Für Country-Felder den ausgeschriebenen Namen holen
    if ( in_array( $meta_key, [ 'billing_country', 'shipping_country' ], true ) ) {
        $countries = WC()->countries->get_countries();
        return esc_html( $countries[ $value ] ?? $value ); // fallback: ISO-Code
    }

    return esc_html( $value );
}
add_filter( 'bricks/dynamic_data/render_content', 'woo_replace_woo_account_tags_in_content', 20, 3 );
add_filter( 'bricks/frontend/render_data', 'woo_replace_woo_account_tags_in_content', 20, 2 );

function woo_replace_woo_account_tags_in_content( $content, $post = null, $context = 'text' ) {
    $placeholders = [
        '{woo_billing_first_name}',
        '{woo_billing_last_name}',
        '{woo_billing_email}',
        '{woo_billing_company}',
        '{woo_billing_address_1}',
        '{woo_billing_postcode}',
        '{woo_billing_city}',
        '{woo_billing_country}',
        '{woo_billing_phone}',
        '{woo_shipping_first_name}',
        '{woo_shipping_last_name}',
        '{woo_shipping_email}',
        '{woo_shipping_company}',
        '{woo_shipping_address_1}',
        '{woo_shipping_postcode}',
        '{woo_shipping_city}',
        '{woo_shipping_country}',
    ];

    foreach ( $placeholders as $tag ) {
        if ( strpos( $content, $tag ) !== false ) {
            $value = woo_render_woo_account_tag( $tag, $post, $context );
            $content = str_replace( $tag, $value, $content );
        }
    }

    return $content;
}

Unterstützte Rechnungsdaten:

  • {woo_billing_first_name}
  • {woo_billing_last_name}
  • {woo_billing_company}
  • {woo_billing_address_1}
  • {woo_billing_postcode}
  • {woo_billing_city}
  • {woo_billing_country}
  • {woo_billing_phone}
  • {woo_billing_email}

Unterstützte Lieferdaten:

  • {woo_shipping_first_name}
  • {woo_shipping_last_name}
  • {woo_shipping_company}
  • {woo_shipping_address_1}
  • {woo_shipping_postcode}
  • {woo_shipping_city}
  • {woo_shipping_country}

Die Daten stammen direkt aus den WooCommerce User Meta-Feldern und können vollständig über WordPress verwaltet werden.

Automatisches Ersetzen der Platzhalter

Sobald ein Benutzer eingeloggt ist, wird jeder dieser Platzhalter dynamisch ersetzt. So kannst du in Bricks nicht nur Inhalte anpassen, sondern auch z. B. benutzerdefinierte PDF-Dokumente oder Bestätigungsseiten personalisieren – ganz ohne zusätzliche Plugins.

Länder werden dabei automatisch von ISO-Code zu Klartext (z. B. „AT“ → „Österreich“) übersetzt.

// Für Country-Felder den ausgeschriebenen Namen holen
    if ( in_array( $meta_key, [ 'billing_country', 'shipping_country' ], true ) ) {
        $countries = WC()->countries->get_countries();
        return esc_html( $countries[ $value ] ?? $value ); // fallback: ISO-Code
    }

Warum WPCodeBox?

Mit WPCodeBox kannst du deinen PHP-Code in einer übersichtlichen Oberfläche verwalten, lokal oder cloudbasiert speichern und sogar bedingte Ladeoptionen nutzen. Das macht es zum perfekten Werkzeug für diese Art von Erweiterung – vor allem in Multi-Site- oder WooCommerce-Projekten.

Agentur-Support für dein Projekt

Wenn du bei der Umsetzung Unterstützung brauchst oder dein WooCommerce-Projekt effizient weiterentwickeln möchtest, bin ich mit meiner Agentur purin.at gerne für dich da. Ob individuelle Bricks-Erweiterung, API-Anbindung oder Performance-Optimierung – ich begleite dein Projekt zuverlässig von der Konzeption bis zum Launch.

Fazit

Die Integration dynamischer WooCommerce-Daten in Bricks war bisher ein aufwändiges Unterfangen – mit dieser Lösung wird sie zur Standardfunktion. Durch eigene Dynamic Tags kannst du Kundeninformationen gezielt und personalisiert einsetzen – ideal für Checkout-Strecken, Kunden-Dashboards oder Marketing-Anwendungen.

Die Kombination mit WPCodeBox macht den Prozess wartungsarm, flexibel und sicher. Damit hebst du dein WooCommerce-Setup technisch wie auch gestalterisch auf ein neues Level.

Christoph Purin
Christoph Purin

Mein Name ist Christoph Purin und befasse mich mit IoT Geräten wie Raspberry, Arduino, ESP. Auch Aktivitäten wie die FFW, Quad-fahren, Amateurfunk zählen zu meinen bevorzugten Hobbys.
Dieser Blog, stellt eine Sammlung meiner Projekte dar, wie Dinge gelöst oder umgebaut werden können.

Artikel: 370

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert