Как показать артикул с названием товара на странице «Заказ получен» и «Заказ по электронной почте»

В functions.php

add_action( 'woocommerce_add_order_item_meta', 'custom_add_item_sku', 10, 3 );
function custom_add_item_sku( $item_id, $values, $cart_item_key ) {

$item_sku = get_post_meta( $values[ 'product_id' ], '_sku', true );

wc_add_order_item_meta( $item_id, 'SKU', $item_sku , false );

}

Но это показывает значение SKU ниже названия продукта, но я хочу это так

Артикул: 123sd — Наименование продукта

1

Решение

Обновление 2018-04-01 — Изменение хука и улучшенный код.

Вместо этого используйте хук фильтра woocommerce_order_item_name. Я сделал некоторые изменения в вашем коде:

add_filter( 'woocommerce_order_item_name', 'sku_before_order_item_name', 30, 3 );
function sku_before_order_item_name( $item_name, $item, $is_visible ) {
$product = $item->get_product();
$sku = $product->get_sku();

// When sku doesn't exist we exit
if( empty( $sku ) ) return $item_name;

$sku_text = __( 'SKU', 'woocommerce' ) . ': ' . $sku;

// Add product permalink when argument $is_visible is true
$product_permalink =  $is_visible ? $product->get_permalink( $item ) : '';

if( $product_permalink )
return sprintf( '<a href="%s">%s - %s</a>', $product_permalink, $sku_text, $item->get_name() );
else
return $sku_text . ' - ' . $item->get_name();
}

Код помещается в файл function.php вашей активной дочерней темы (или темы) или также в любой файл плагина.

Проверено в WooCommerce 3+ и работает.


Отображение артикула в названии товаров в корзине (Обновлено: со ссылкой на страницу корзины):

add_filter( 'woocommerce_cart_item_name', 'sku_before_cart_item_name', 10, 3 );
function sku_before_cart_item_name( $product_name, $cart_item, $cart_item_key ) {
$product =  $cart_item['data'];
$sku = $product->get_sku();

// When sku doesn't exist we exit
if( empty( $sku ) ) return $product_name;

$sku_text = __( 'SKU', 'woocommerce' ) . ': ' . $sku;
$product_permalink = $product->get_permalink( $cart_item );

if ( is_cart() )
return sprintf( '<a href="%s">%s - %s</a>', esc_url( $product_permalink ), $sku_text, $product->get_name() );
else
return $sku_text . ' - ' . $product_name;
}

Код помещается в файл function.php вашей активной дочерней темы (или темы) или также в любой файл плагина.

Проверено в WooCommerce 3+ и работает.

1

Другие решения

Я бы изменил хук на «woocommerce_new_order_item», так как кажется, что с «woocommerce_add_order_item_meta» могут возникнуть некоторые проблемы с устареванием

Что-то вроде этого должно добавить имя после SKU, но я не знаю, если это именно то, что вы ищете.

    add_action( 'woocommerce_new_order_item', 'custom_add_item_sku', 10, 3 );
function custom_add_item_sku( $item_id, $values, $cart_item_key ) {
$item_sku = get_post_meta( $values[ 'product_id' ], '_sku', true );
$name = = $values['name'];
wc_add_order_item_meta( $item_id, 'SKU', $item_sku . ' - ' . $name , false );
}
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector