我已经自定义了我的 WooCommerce 商店,为产品变体分配优先级 (1-4),这有助于我们更有效地管理库存。这些优先级将保存为每个产品变体的后元。
我现在面临的挑战是自动的库存不足电子邮件通知。我想在这些电子邮件中包含产品变体的优先级,以使补货过程更加高效。
如何检索每个变体的优先级元并将其注入 WooCommerce 低库存电子邮件内容中?理想情况下,我希望电子邮件包含低库存变体列表及其各自的优先级。
这是我的 PHP 代码,它为产品变体分配优先级:
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}\n";
}
} 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 .= "\n\nProduktionsprioritet:\n" . $priority_info;
}
return $email_content;
}
add_filter('woocommerce_mail_content', 'customize_low_stock_email_notification', 20, 2);
你没有使用正确的钩子,你让事情变得更加复杂。
尝试将最后两个功能简单地替换为以下(假设在产品变体级别启用了库存管理):
add_filter( 'woocommerce_email_content_low_stock', 'filter_email_content_low_stock', 10, 2 );
function filter_email_content_low_stock( $message, $product ) {
if ( $priority = $product->get_meta('_prio_production') ) {
$message .= sprintf('<br><div class="product-priority">%s: %s</div>',
__('Prio Produktion för denna variant', 'woocommerce'),
esc_html($priority)
);
}
return $message;
}
代码位于子主题的functions.php 文件中(或插件中)。应该可以。