Ausgangslage
Der WooCommerce Bexio Automator an sich unterstützt nicht konkret Produktvarianten, zumal Bexio auch nur einfache Produkte unterstützt. Für generelle Informationen, wie variable Produkte synchronisiert werden können, siehe hier.
Wie variable Produkte in den Bexio-Aufträgen angezeigt werden, ist standardmässig unter anderem davon abhängig, ob eine Standardposition oder eine Produktposition erstellt wurde:
- Bei Standardpositionen wird der Name des Artikels, wie er aus der Bestellposition in WooCommerce ausgelesen wurde, an Bexio übermittelt. Optional wird noch die Produkt-Kurzbeschreibung angehängt (wenn diese Option aktiviert wurde).
- Bei Produktpositionen werden standardmässig Name, Artikel-Nummer und Beschreibung des Bexio-Produktes in die Position übernommen. Ausnahme ist, wenn bereits vom Shop ein anderer Text geschickt wird (siehe hier).
Welche Art von Position erstellt wurde, ist an deren Icon im Bexio-Auftrag erkennbar:
Bei variablen Produkten ist oft gewünscht, dass die Informationen der gekauften Variante einheitlich im Bexio-Auftrag ersichtlich sind. Wenn die Synchronisierung nicht überschrieben wird, ist dies standardmässig davon abhängig, ob eine Produktposition erstellt wurde (siehe oben) und wie viele variablen Eigenschaften das Produkt hat.
Verhalten von WooCommerce
WooCommerce hinterlegt die Informationen der bestellten Produkt-Variante unterschiedlich, je nachdem, wie viele variablen Eigenschaften ein Produkt hat:
- Bei bis zu 2 Eigenschaften: WooCommerce hängt diese nach einem " - " Kommagetrennt dem Artikelnamen an und schreibt dies so direkt in den Namen der Bestellposition. Über wc_display_item_meta() sind die Eigenschaften nicht auslesbar.
- Ab 3 Eigenschaften: WooCommerce schreibt diese nicht mehr in den Namen der Bestellposition und sie sind über wc_display_item_meta() auslesbar. Dort werden sie dann auch als Liste (anstatt kommagetrennt) angezeigt.
Die Darstellung von variablen Produkten in den Auftragspositionen ist somit je nach Situation unterschiedlich:
- Bei Standardpositionen:
- Bei <= 2 Eigenschaften: die Eigenschaften werden von WooCommerce dem Produkt-Titel angehängt.
- Bei >= 3 Eigenschaften: die Eigenschaften werden von WooCommerce in die Meta-Informationen geschrieben und sind nicht im Produkt-Titel angehängt.
- Wird die Produkt-Kurzbeschreibung aktiviert, wird der Produkt-Titel + die Kurzbeschreibung angezeigt.
- Bei Produktpositionen:
- Es werden immer die Daten des Bexio-Produktes angezeigt, unabhängig von der effektiv bestellten Produktvariante.
- Wird die Produkt-Kurzbeschreibung aktiviert, wird der Produkt-Titel (wie bei Standardpositionen) + die Kurzbeschreibung angezeigt.
Einheitliche Darstellung in den Bexio-Aufträgen
Um eine einheitliche Darstellung von variablen Produkten in den Bexio-Aufträgen sicherzustellen, muss daher die Synchronisierung überschrieben und die Varianten-Informationen immer gleich übermittelt werden. Dazu sollte wie folgt vorgegangen werden:
- Die Daten der Bestellposition mit dem bestehenden Filter überschreiben.
- Den Produkt-Titel überschreiben (bei weniger als 3 Eigenschaften sind diese direkt dem Titel angehängt).
- Die relevanten Produkt-Eigenschaften sammeln und im Text der Position anhängen.
Zum Überschreiben der Daten der Bestellposition kann der Filter 'raptus_wc_bexio_connector_order_item_data' verwendet werden. Ein Beispiel, wie die Meta-Informationen der Bestellposition (ohne die internen Meta-Daten) gesammelt und aufgelistet werden können:
add_filter('raptus_wc_bexio_connector_order_item_data', 'append_order_item_variation_attributes', 10, 4);
function append_order_item_variation_attributes($item_data, $item, $product, $order) {
// Only modify variable products
if (!($product instanceof \WC_Product_Variation)) {
return $item_data;
}
// Set the name to the parent product (needed for variations with <=2 attributes)
$parent_product_id = $product->get_parent_id();
$parent_product = wc_get_product($parent_product_id);
if ($parent_product) {
$item_data['name'] = $parent_product->get_name();
}
// Get meta data, excluding internal keys starting with '_'
$meta_data = $item->get_formatted_meta_data('_', true);
if (empty($meta_data)) {
return $item_data;
}
// Create a list of the meta data
$html = '<ul>';
foreach ($meta_data as $meta) {
$html .= sprintf('<li><strong>%s:</strong> %s</li>',
wp_strip_all_tags($meta->display_key),
wp_strip_all_tags($meta->display_value)
);
}
$html .= '<ul>';
// Add the meta data to the item's text
// Note: this prevents product positions from automatically loading Bexio's product data
$item_data['text'] = $html;
return $item_data;
}
Kommentare
0 Kommentare