I would like to replace the Product name by the SKU only in Woocommerce --> Orders --> Order Details in the backend admin of WordPress located in the Shipping section.
I tried the following code but it didn't work. I am not skilled with PHP.
add_filter( 'woocommerce_order_item_shipping_get_name', 'filter_order_item_shipping_get_name', 10, 2 );
function filter_order_item_shipping_get_name( $item_name, $order_item ) {
if ( is_admin() && $order_item->is_type('line_item') ) {
$product = $order_item->get_product();
if( $sku = $product->get_sku() ) {
$item_name = $sku;
}
}
return $item_name;
}
Is it possible to know the correct code to replace the Product name by the SKU only in Woocommerce --> Orders --> Order Details Shipping section in the backend admin of WordPress?
How do I solve this problem?
The filter you want to use is woocommerce_order_item_display_meta_value
. It takes 3 parameters, and the third one is a shipping object in the place you are hoping to hook in. You test that its tye is 'shipping'
to make sure you don't modify other areas. Next you have to get the parent order object, get the order items objects from that, and loop through them to build the output string.
add_filter( 'woocommerce_order_item_display_meta_value', 'filter_order_item_display_meta_value', 10, 3 );
function filter_order_item_display_meta_value( $meta_value, $meta_object, $order_item ) {
if ( is_admin() && $order_item->is_type('shipping') ) {
$meta_values = [];
$order = $order_item->get_order();
$order_items = $order->get_items();
foreach( $order_items as $order_item ){
$quantity = $order_item->get_quantity();
$product = $order_item->get_product();
$sku = $product->get_sku();
$name = $product->get_name();
if( $sku ) {
$meta_values[] = $sku . ' × ' . $quantity;
} else {
$meta_values[] = $name . ' × ' . $quantity;
}
}
return implode( ', ', $meta_values );
}
return $meta_value;
}