Добро пожаловать в WPSE.
$item
- это экземпляр WC_Order_Item
, а не массив, поэтому невозможно получить product_id из объекта позиции заказа, подобного этому ($item['product_id']
).
Я предлагаю используя стандартные методы WooCommerce, как показано ниже.
Обновление:
woocommerce_email_order_item_quantity
Фильтр действий не предоставляет аргумента, чтобы узнать, является ли это электронная почта администратора или клиента. Для этого нам нужно сделать трюк.
Я бы подключил функцию к действию woocommerce_email_order_details
, чтобы выяснить, будет ли текущее электронное письмо отправлено администратору, и сохранить его в константе, чтобы впоследствии изменить количество на основе его значения. Woocommerce перехватывает эту функцию с приоритетом 10, поэтому нам нужен более низкий приоритет.
add_action( 'woocommerce_email_order_details', function( $order, $sent_to_admin )
{
if ( $sent_to_admin && ! defined('TST_ADMIN_EMAIL') ) {
define( 'TST_ADMIN_EMAIL', true );
}
}, 9, 2 );
add_filter( 'woocommerce_email_order_item_quantity', 'tst_filter_woocommerce_email_order_item_quantity', 10, 2 );
function tst_filter_woocommerce_email_order_item_quantity( $qty_display, $item )
{
if (
defined('TST_ADMIN_EMAIL')
&& true === TST_ADMIN_EMAIL
&& 'line_item' === $item->get_type()
) {
$product = $item->get_product();
$product_id = $product->get_id();
if ( $product_id == 6960 ) {
$qty_display = $qty_display * 2;
}
}
return $qty_display;
};