Добавьте ценность инвентаря к электронным письмам низкого уровня инвентаря

0

Я пытаюсь добавить ценность инвентаря продукта в электронные письма с уведомлением об уровне запасов в Woocommerce.

Код уведомления по электронной почте находится в строке 386 класса WC_Emails, однако у него нет действия, поэтому я не уверен в том, что вы можете добавить его без изменения основного файла.

Теги:
woocommerce

2 ответа

1
Лучший ответ

Эта почта - это просто функция, прикрепленная к крючку. Вы должны удалить его, а затем добавить свой собственный. 100% непроверенных, поэтому используйте на свой страх и риск.

Я не уверен на 100% о том, как удалить обратный вызов из woocommerce_low_stock_notification потому что я не уверен, как получить доступ к экземпляру WC_Emails.

function so_27786112_remove_notification(){
    $emails = WC_Emails::instance();
    remove_action( 'woocommerce_low_stock_notification', array( $emails, 'low_stock' ) );
}
add_action( 'woocommerce_init', 'so_27786112_remove_notification' );

Но, как сказал Эндрю, вы можете просто дублировать low_stock() вызов low_stock() и изменять его по low_stock(). Я просто добавил пользовательскую функцию к соответствующему hook. Я действительно только изменил уравнение $message чтобы использовать метод get_stock_quantity().

function so_27786112_stock_notification( $product ) {

    $blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);

    $subject = apply_filters( 'woocommerce_email_subject_low_stock', sprintf( '[%s] %s', $blogname, __( 'Product low in stock', 'woocommerce' ) ), $product );

    $sku = ($product->sku) ? '(' . $product->sku . ') ' : '';

    if ( ! empty( $product->variation_id ) )
        $title = sprintf(__( 'Variation #%s of %s', 'woocommerce' ), $product->variation_id, get_the_title($product->id)) . ' ' . $sku;
    else
        $title = sprintf(__( 'Product #%s - %s', 'woocommerce' ), $product->id, get_the_title($product->id)) . ' ' . $sku;

    $qty = $product->get_stock_quantity();
    $message = $title . sprintf( __( ' has %s remaining in stock.', $qty ) );

    //  CC, BCC, additional headers
    $headers = apply_filters('woocommerce_email_headers', '', 'low_stock', $product);

    // Attachments
    $attachments = apply_filters('woocommerce_email_attachments', array(), 'low_stock', $product);

    // Send the mail
    wp_mail( get_option('woocommerce_stock_email_recipient'), $subject, $message, $headers, $attachments );
}
add_action( 'woocommerce_low_stock_notification', 'so_27786112_stock_notification' );

Если первая часть не работает, вы должны получить 2 письма.

  • 0
    Спасибо @helgatheviking. Нужно было изменить несколько вещей в своем коде, чтобы заставить его работать, но после этого, вы действительно правы, теперь он отправляет два электронных письма, поскольку исходный обратный вызов не был удален. Я поиграю с этим еще немного, но если у вас или у кого-то есть какие-либо предложения, я буду признателен. Спасибо!
  • 0
    Что ты изменил? Я хотел бы обновить свой ответ, если это поможет другим людям. Я remove_action чтобы посмотреть, будет ли это лучше.
Показать ещё 1 комментарий
0

Один из вариантов - создать собственный класс, который расширяет класс WC_Emails. Затем скопируйте метод low_stock() из своего класса в ваш, который переопределит их функцию с вашей. Таким образом, вы можете настроить свою собственную функцию, но вы хотите, и вы не будете редактировать основной файл.

Другой вариант - добавить фильтры, которые вам понадобятся, и отправить запрос на возврат обратно в WooThemes. Они могут просто принять его и сделать его частью ядра.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню