根据产品变体自定义字段自定义 WooCommerce 低库存电子邮件内容

问题描述 投票:0回答:1

我已经自定义了我的 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);

php wordpress woocommerce email-notifications product-variations
1个回答
0
投票

你没有使用正确的钩子,你让事情变得更加复杂。

尝试将最后两个功能简单地替换为以下(假设在产品变体级别启用了库存管理)

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 文件中(或插件中)。应该可以。

© www.soinside.com 2019 - 2024. All rights reserved.