Я пытаюсь добавить ценность инвентаря продукта в электронные письма с уведомлением об уровне запасов в Woocommerce.
Код уведомления по электронной почте находится в строке 386 класса WC_Emails, однако у него нет действия, поэтому я не уверен в том, что вы можете добавить его без изменения основного файла.
Эта почта - это просто функция, прикрепленная к крючку. Вы должны удалить его, а затем добавить свой собственный. 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 письма.
Один из вариантов - создать собственный класс, который расширяет класс WC_Emails. Затем скопируйте метод low_stock() из своего класса в ваш, который переопределит их функцию с вашей. Таким образом, вы можете настроить свою собственную функцию, но вы хотите, и вы не будете редактировать основной файл.
Другой вариант - добавить фильтры, которые вам понадобятся, и отправить запрос на возврат обратно в WooThemes. Они могут просто принять его и сделать его частью ядра.
remove_action
чтобы посмотреть, будет ли это лучше.