为低库存水平的电子邮件增加库存价值
Add inventory value to low inventory level emails
我正在尝试将产品库存值添加到 Woocommerce 中的低库存水平通知电子邮件中。
电子邮件通知代码在 line 386 of WC_Emails class 上,但是它没有任何操作,所以我不确定在不更改核心文件的情况下添加它的最佳方法。
一种选择是制作自己的 class 来扩展 WC_Emails class。然后将 low_stock() 方法从他们的 class 复制到你的,这将用你的覆盖他们的功能。这样您就可以根据需要调整自己的功能,而不会编辑核心文件。
另一种选择是在此处添加您需要的过滤器,然后将拉取请求提交回 WooThemes。他们可能只是接受它并将其作为核心的一部分。
这个邮件只是挂钩的一个函数。您应该能够删除它,然后添加您自己的。 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' );
但正如 Andrew 所建议的,您可以复制 low_stock()
回调并根据需要进行修改。我只是在适当的挂钩中添加了一个自定义函数。我实际上只更改了 $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 封电子邮件。
我正在尝试将产品库存值添加到 Woocommerce 中的低库存水平通知电子邮件中。
电子邮件通知代码在 line 386 of WC_Emails class 上,但是它没有任何操作,所以我不确定在不更改核心文件的情况下添加它的最佳方法。
一种选择是制作自己的 class 来扩展 WC_Emails class。然后将 low_stock() 方法从他们的 class 复制到你的,这将用你的覆盖他们的功能。这样您就可以根据需要调整自己的功能,而不会编辑核心文件。
另一种选择是在此处添加您需要的过滤器,然后将拉取请求提交回 WooThemes。他们可能只是接受它并将其作为核心的一部分。
这个邮件只是挂钩的一个函数。您应该能够删除它,然后添加您自己的。 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' );
但正如 Andrew 所建议的,您可以复制 low_stock()
回调并根据需要进行修改。我只是在适当的挂钩中添加了一个自定义函数。我实际上只更改了 $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 封电子邮件。