Über den Filter woocommerce_cart_item_name
wird der Produktname durch den Bestellvorgang hindurch modifiziert. In Notification E-Mails und der Bestellanzeige des Kundendashboards steht hingegen wieder der originale Produktname. Die Besonderheit ist, dass in den meisten Fällen im Warenkorb ein Link greift, wohingegen im Checkout nur noch eine Produktliste ohne Verlinkung verwendet wird. Daher wird in der Funktion im Checkout der Link mit strip_tags
entfernt.
add_filter( 'woocommerce_cart_item_name', 'my_custom_cart_item_name', 12, 3 );
function my_custom_cart_item_name( $product_name, $cart_item, $cart_item_key ) {
$id = $cart_item['product_id'];
$custom_meta_data = get_post_meta( $id, 'custom_field_key', true );
$title = get_the_title( $id );
$product_url = get_permalink( $id );
if ( $custom_meta_data) $product_name = sprintf( '<a href="%s"><div class="class-aus-quellcode-ermitteln"><div class="ast-product-name">%s</div></div></a> ', $product_url, $title . ' | ' . custom_meta_data );
if ( is_checkout() ) {
$product_name = strip_tags( $product_name );
}
return $product_name;
}
Soll die Produkttitelerweiterung auch in E-Mails und im Kundendashboard angezeigt werden, wird dies über den woocommerce_order_item_name
Filter erreicht. Um die Metadaten des Produkts über dessen ID zu erhalten, muss über die $item->get_product();
erstmal die ID des Produkts ermittelt werden. Der nachfolgende Filter wird nicht benötigt, wenn über der Produktname über die woocommerce_checkout_order_processed
Action in der Datenbank gespeichert wird.
add_filter( 'woocommerce_order_item_name', 'my_custom_order_item_name', 12, 3 );
function my_custom_order_item_name( $item_name, $item, $false ) {
$product = $item->get_product();
$id = $product->get_id();
$custom_meta_data = get_post_meta( $id, 'custom_field_key', true );
$title = get_the_title( $id );
if ( $custom_meta_data) {
$item_name .= ' | ' . $custom_meta_data;
}
return $item_name;
}
Wo der Filter allerdings nicht greift, ist die Anzeige der Produktdaten in den gespeicherten Bestellungen im Admin-Dashboard. Hierfür müssten die Daten im Zuge der Bestellung direkt in der Datenbank gespeichert werden. Die Action wirkt sich auf die E-Mail-Daten, die angezeigten Daten im Kunden-Dashboard und die Bestelldaten aus. Bei der Anwendung der woocommerce_checkout_order_processed
Action im Zuge derer der gesamte Produktname in den Bestelldaten gespeichert wird, erübrigt sich die Anwendung des woocommerce_order_item_name
Filters.
add_action( 'woocommerce_checkout_order_processed', 'my_custom_update_order_item_name' );
function my_custom_update_order_item_name( $order_id ) {
$order = wc_get_order( $order_id );
// orter items loop
foreach ( $order->get_items() as $item_id => $item ) {
$product = $item->get_product();
$id = $product->get_id();
$item_name = $item->get_name();
$custom_meta_data = get_post_meta( $id, 'custom_field_key', true );
if ( $custom_meta_data ) {
if ( $term ) $item_name .= ' | ' . $custom_meta_data ;
}
wc_update_order_item( $item_id, array( 'order_item_name' => $item_name ) );
}
}
}
Schreibe einen Kommentar