WooCommerce: Produktnamen bei Bestellvorgang und in Bestellung mit Custom Field Daten erweitern

squirrel 8132645 1920
Foto von Nottensdorf auf Pixabay

Ü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 ) );
		}
	}
}

Bitte Kommentarfunktion nicht für Supportanfragen nutzen. Dem kann hier nicht entsprochen werden. Die Angabe einer E-Mail-Adresse und eines Namens ist nicht erforderlich. Einen (Spitz)-Namen zu nennen wäre aber doch nett.

Schreibe einen Kommentar

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

Hinweis: Sowohl angegebener Name als auch E-Mail-Adresse (beides ist optional, dafür werden alle Kommentare vor Veröffentlichung geprüft) werden dauerhaft gespeichert. Du kannst jeder Zeit die Löschung Deiner Daten oder / und Kommentare einfordern, direkt über dieses Formular (wird nicht veröffentlicht, und im Anschluss gelöscht), und ich werde das umgehend erledigen. – Mit hinterlassenen Kommentaren hinterlegte IP-Adressen werden nach zwei Monaten automatisch gelöscht

publicly queryable