Добавьте вложение электронной почты в уведомления WooCommerce в зависимости от категории продукта

Для некоторых моих продуктов мне нужно отправить дополнительный PDF-файл (не счет-фактуру) моим клиентам.

С помощью этого поста: https://wordpress.org/support/topic/attach-pdf-to-confirmation-email-for-specific-product/

Я смог прикрепить вложение к каждому электронному письму с подтверждением заказа. Затем я попытался изменить код для фильтрации по артикулу продукта.

В этом посте я нашел некоторую информацию о доступных переменных и прочитал о некоторых изменениях для WP3: Как получить детали заказа WooCommerce

Вот мой код, который, к сожалению, не работает и больше ничего не прикрепляет к электронному письму с подтверждением:

add_filter( 'woocommerce_email_attachments', 'webroom_attach_to_wc_emails', 10, 3);
function webroom_attach_to_wc_emails ( $attachments , $email_id, $order ) {
// Avoiding errors and problems
if ( ! is_a( $order, 'WC_Order' ) || ! isset( $email_id ) ) {
   return $attachments;
}

$file_path = get_stylesheet_directory() . '/Lizenzen/TestAttachment.pdf'; 
$product_sku    = '1234';

if ( $email_id === 'customer_processing_order' ){
        foreach ($order->get_items() as $item_key => $item ):
        $product        = $item->get_product();
        if ( $product_sku === $product->get_sku() ) {
            $attachments[] = $file_path;    
        }
    endforeach;
    }


return $attachments;
  }

Как мне изменить его, чтобы проверять категорию продукта вместо SKU?

Общий вопрос: как я могу отлаживать этот php-код? Есть ли способ показать, например. переменные, такие как email_id и т. д., чтобы проверить, получает ли код правильные значения?

«Как я могу отладить этот php-код?» см.: Как отлаживать в WooCommerce 3

7uc1f3r 11.12.2020 09:15
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
1
669
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Следующий код добавляет вложение на основе

  • Категория продукта
  • $email_id === 'customer_processing_order'.

Для других $email_ids см. Как настроить таргетинг на другие электронные письма с заказами WooCommerce


Также убедитесь, что путь к файлу указан правильно!

  • get_template_directory() — извлекает путь к каталогу шаблона для текущей темы.

Итак, вы получаете:

function filter_woocommerce_email_attachments( $attachments, $email_id, $order, $email_object = null ) {    
    // Avoiding errors and problems
    if ( ! is_a( $order, 'WC_Order' ) || ! isset( $email_id ) ) return $attachments;

    // File path
    $file_path = get_template_directory() . '/Lizenzen/TestAttachment.pdf';
    
    // Specific categories, several could be added, separated by a comma
    $specific_categories = array( 'Categorie-A', 'categorie-1' );
    
    // Email id equal to (view: https://stackoverflow.com/a/61459068/11987538)
    if ( $email_id === 'customer_processing_order' ) {
        // Loop through order items
        foreach( $order->get_items() as $item ) {
            // Product ID
            $product_id = $item->get_variation_id() > 0 ? $item->get_variation_id() : $item->get_product_id();

            // Has term (product category)
            if ( has_term( $specific_categories, 'product_cat', $product_id ) ) {
                // Push to array
                $attachments[] = $file_path;
            }
        }
    }
    
    return $attachments;
}
add_filter( 'woocommerce_email_attachments', 'filter_woocommerce_email_attachments', 10, 4 );

Другие вопросы по теме