Добавить URL избранного изображения в названия продуктов для уведомления о новом заказе WooCommerce

Я сделал фильтр, чтобы обновить, как порядок отображается в woocommerce. В основном мне нужно, чтобы владелец магазина мог щелкнуть название каждого продукта (теперь связанного с рекомендуемым изображением), а также он, чтобы иметь возможность видеть URL-адрес (потому что имя файла изображения полезно для них, чтобы отслеживать продукт)

Мне это нужно ТОЛЬКО, чтобы повлиять на электронное письмо с НОВЫМ ЗАКАЗОМ, отправленное владельцу магазина.

Мой код, помещенный в functions.php, обновляется НО во ВСЕХ письмах, а также в таблице подтверждения заказа на веб-сайте.

Вопрос? Как я могу повлиять ТОЛЬКО на электронное письмо с новым заказом? Я думаю, что мне что-то здесь не хватает.

// item name link to product

add_filter( 'woocommerce_order_item_name', 'display_product_title_as_link', 10, 2 );
function display_product_title_as_link( $item_name, $item ) {

    $_product = get_product( $item['variation_id'] ? $item['variation_id'] : $item['product_id'] );

    $image = wp_get_attachment_image_src( get_post_thumbnail_id( $_product->post->ID ), 'full' );

    return '<a href="'. $image[0] .'"  rel="nofollow">'. $item_name .'</a>
    <div style="color:blue;display:inline-block;clear:both;">'.$image[0].'</div>';

}

person Herzlin    schedule 11.10.2017    source источник


Ответы (2)


@LoicTheAztec - не могло работать! href как изображение? Полное изображение в виде миниатюры? (Большое электронное письмо) Отсутствует постоянная ссылка на продукт ... Функция восстановления display_product_title_as_link:

function display_product_title_as_link( $item_name, $item ) {
    $product = wc_get_product( $item['variation_id'] ? $item['variation_id'] : $item['product_id'] );
    $image = wp_get_attachment_image_src( $product->get_image_id(), 'thumbnail' );
    $product_name = $product->get_name();
    $product_link = get_permalink( $product->get_id() );
    return '<a href="'. $product_link .'" target="_blank"><img width="70" height="70" src="'.$image[0].'" alt="'. $product_name .'">'. $product_name .'</a> ';
}
person Stieranka    schedule 15.11.2018
comment
трудно понять, что ты имеешь в виду - person Herzlin; 16.11.2018
comment
@Amouratoglou - хм ... код от LoicTheAztec был плохим, не работал. Я написал фиксированную функцию. (Извините за мой плохой английский) - person Stieranka; 17.11.2018

Сначала в вашем коде есть некоторые ошибки, например:

  • Функция get_product() явно устарела и была заменена на wc_get_product()
  • Поскольку в Woocommerce 3+ WC_Product можно получить доступ напрямую, вместо этого используйте доступные методы.

Вот правильный способ получить то, что вы ожидаете (только в уведомлении администратора «Новый заказ»):

// Your custom function revisited
function display_product_title_as_link( $item_name, $item ) {
    $product = wc_get_product( $item['variation_id'] ? $item['variation_id'] : $item['product_id'] );
    $image = wp_get_attachment_image_src( $product->get_image_id(), 'full' );
    $product_name = $product->get_name();
    return '<a href="'. $image[0] .'" rel="nofollow">'. $product_name .'</a>
    <div style="color:blue;display:inline-block;clear:both;">'.$image[0].'</div>';
}

// The hooked function that will enable your custom product title links for "New Order" notification only
add_action( 'woocommerce_email_order_details', 'custom_email_order_details', 1, 4 );
function custom_email_order_details( $order, $sent_to_admin, $plain_text, $email ){
    // Only for "New Order" and admin email notification
    if ( 'new_order' != $email->id && ! $sent_to_admin ) return;
    // Here we enable the hooked function
    add_filter( 'woocommerce_order_item_name', 'display_product_title_as_link', 10, 3 );
}

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

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

person LoicTheAztec    schedule 11.10.2017
comment
Спасибо за быстрый ответ и исправление, я очень признателен. Я протестировал и работаю, но все еще показывает изменения в электронных письмах, которые получает клиент. И новое уведомление о заказе для электронной почты администратора и клиента имеет измененный заголовок со ссылкой на изображение. Мне нужно, чтобы это было только в электронном письме, отправленном владельцу магазина. - person Herzlin; 12.10.2017
comment
@GauchoCode… На моем тестовом сервере он работает отлично (под WooCommerce Version 3.1.2). Я никогда не публикую ответ до его тестирования ... Важно: вы удалили свой старый код перед добавлением этого? - person LoicTheAztec; 12.10.2017
comment
Я перепроверил, и нет никаких следов моего старого кода. Только тот, который вы создали, оба письма (клиентское и админское) выглядят одинаково, оба имеют измененный заголовок и показывают URL-адрес изображения. тестирование с последней версией Woo. Я провел несколько тестов, и все они показывают одно и то же в обоих письмах ... i63.tinypic.com/6hoo4l. png - person Herzlin; 12.10.2017
comment
@GauchoCode Для меня это работает ... Извините, но я не могу догадаться, что происходит с вашей установкой Wordpress и настройками, из-за которых это не работает для вас ... Допустим, я пробовал. - person LoicTheAztec; 12.10.2017
comment
Я тестировал с чистым WP ни один другой плагин, и он по-прежнему влияет на мою электронную почту для клиента ... спасибо за попытку! Я посмотрю, смогу ли я объединить ваш код с другими фрагментами кода и заставить его работать так, как мне нужно. Спасибо за очистку и обновление моего кода. - person Herzlin; 12.10.2017
comment
@LoicTheAztec версия WooCommerce: 3.9.2 и версия WordPress: 5.3.2. Ваш код также показывает изображение Заказчику. Любые настройки, чтобы исправить это, чтобы изображения показывались ТОЛЬКО ДЛЯ АДМИНИСТРАТОРА? Большое спасибо! - person KoolPal; 18.02.2020