如何在WooCommerce低库存邮件中加入产品变体优先级信息?
问题
已为WooCommerce商店的产品变体自定义了1-4级优先级(存储为post meta _prio_production),用于优化库存管理。需要在自动低库存通知邮件中加入产品变体的优先级信息以提升补货效率,但现有自定义代码未对低库存邮件产生效果。目标是让邮件包含缺货变体的优先级信息。
用户已实现的优先级字段代码:
function add_priority_field_to_variants($loop, $variation_data, $variation) { ?> <div class="form-row form-row-full"> <label for="prio_production_<?php echo $loop; ?>"><?php _e('Prio Produktion', 'woocommerce'); ?> </label> <select id="prio_production_<?php echo $loop; ?>" name="prio_production[<?php echo $loop; ?>]"> <option value="1" <?php selected(get_post_meta($variation->ID, '_prio_production', true), '1'); ?>>1</option> <option value="2" <?php selected(get_post_meta($variation->ID, '_prio_production', true), '2'); ?>>2</option> <option value="3" <?php selected(get_post_meta($variation->ID, '_prio_production', true), '3'); ?>>3</option> <option value="4" <?php selected(get_post_meta($variation->ID, '_prio_production', true), '4'); ?>>4</option> </select> </div> <?php } add_action('woocommerce_product_after_variable_attributes', 'add_priority_field_to_variants', 10, 3); function save_priority_field_variants($variation_id, $i) { $prio_production = $_POST['prio_production'][$i]; if (isset($prio_production)) { update_post_meta($variation_id, '_prio_production', sanitize_text_field($prio_production)); } } add_action('woocommerce_save_product_variation', 'save_priority_field_variants', 10, 2); function display_priority_on_product_page() { global $product; if ($product->is_type('variable')) { foreach ($product->get_available_variations() as $variation) { $prio_value = get_post_meta($variation['variation_id'], '_prio_production', true); echo '<div class="product-priority">Prio Produktion för denna variant: ' . esc_html($prio_value) . '</div>'; } } } add_action('woocommerce_single_product_summary', 'display_priority_on_product_page', 25);
用户尝试的无效邮件代码:
// Funktion för att hämta och formatera prioritetsinformation för e-postmeddelanden function get_priority_info_for_email($product) { $priority_info = ''; if ($product->is_type('variable')) { $variations = $product->get_children(); foreach ($variations as $variation_id) { $variation_obj = wc_get_product($variation_id); $priority = get_post_meta($variation_id, '_prio_production', true); $variation_description = wc_get_formatted_variation($variation_obj, true); $priority_info .= "{$variation_description} - Prioritet: {$priority} "; } } else { $priority = get_post_meta($product->get_id(), '_prio_production', true); $priority_info = "Prioritet: {$priority}"; } return $priority_info; } // Anpassar e-postmeddelandet för lågt lagersaldo för att inkludera prioritetsinformation function customize_low_stock_email_notification($email_content, $email) { if ('low_stock' === $email->id) { $product = $email->object; $priority_info = get_priority_info_for_email($product); $email_content .= " Produktionsprioritet: " . $priority_info; } return $email_content; } add_filter('woocommerce_mail_content', 'customize_low_stock_email_notification', 20, 2);
问题分析
- 钩子使用错误:用户使用的
woocommerce_mail_content并非低库存邮件的专用钩子,正确的钩子应为woocommerce_email_content_low_stock。 - 逻辑偏差:WooCommerce的低库存通知针对单个变体触发(可变产品的每个变体库存不足时单独发送邮件),而非父产品,因此无需遍历所有变体,直接获取当前触发邮件的变体即可。
修正后的代码
替换用户尝试的邮件相关代码,使用正确钩子并调整逻辑:
// 获取并格式化变体优先级信息用于低库存邮件 function get_variant_priority_for_low_stock_email($product) { $priority = get_post_meta($product->get_id(), '_prio_production', true); // 处理未设置优先级的情况 $priority = !empty($priority) ? $priority : '未设置'; return "Produktionsprioritet: {$priority}"; } // 自定义低库存邮件内容,加入优先级信息 function customize_low_stock_email_content($email_content, $product) { $priority_info = get_variant_priority_for_low_stock_email($product); // 将优先级信息追加到邮件内容末尾 $email_content .= "\n\n" . $priority_info; return $email_content; } add_filter('woocommerce_email_content_low_stock', 'customize_low_stock_email_content', 20, 2);
说明
- 该代码会在每一封低库存通知邮件的末尾添加当前缺货变体的优先级信息。
- 如果变体未设置优先级,会显示“未设置”,避免空值显示。
- 钩子
woocommerce_email_content_low_stock专门用于修改低库存邮件的内容,参数直接传递触发邮件的产品(变体)对象,无需额外遍历。
内容的提问来源于stack exchange,提问作者Silverbear
相关产品推荐
相关产品推荐

