Сохранение и отображение пользовательских метаданных продукта в заказах и электронных письмах WooCommerce

Итак, в основном мы создали настраиваемое поле с помощью ACF в нашем магазине WooCommerce, чтобы добавить уведомление о задержке доставки для определенных продуктов.

Вот демонстрация того, чего мы достигли: https://www.safe-company.com/shop/machines/uvc-disinfection-lamp/

Справочное изображение страницы одного продукта

Затем нам удалось разместить это уведомление на странице одного продукта с помощью Elementor (конструктор страниц), а затем добавить эту информацию к данным товара на странице корзины и оформления заказа со следующим кодом, добавленным в наш functions.php

// Render the custom product field in cart and checkout
add_filter( 'woocommerce_get_item_data', 'wc_add_shipping_delay', 10, 2 );
function wc_add_shipping_delay( $cart_data, $cart_item ) 
{
    $custom_items = array();

    if( !empty( $cart_data ) )
        $custom_items = $cart_data;

    // Get the product ID
    $product_id = $cart_item['product_id'];

    if( $custom_field_value = get_post_meta( $product_id, 'shipping_delay_for_out_of_stock_items', true ) )
        $custom_items[] = array(
            'name'      => __( 'Shipping Delay', 'woocommerce' ),
            'value'     => $custom_field_value,
            'display'   => $custom_field_value,
        );

    return $custom_items;
}

Настраиваемое поле в мете товара со страницы корзины

Наша проблема сейчас в том, что нам нужно добавить это уведомление о задержке доставки в электронное письмо (показать его под каждым товаром, который содержит эти данные соответственно), а также на странице заказа. Как это могло быть сделано? Поскольку я проверил кучу потоков по этому поводу, но все они выполняются с использованием динамических полей (которые пользователь заполняет при покупке), но наш сценарий совсем другой.

Пожалуйста помоги!!

1 ответ

Решение

Следующее будет сохранять ваше настраиваемое поле как метаданные элемента заказа и отображать его повсюду:

// Save and display "shipping delay" on order items everywhere
add_filter( 'woocommerce_checkout_create_order_line_item', 'action_wc_checkout_create_order_line_item', 10, 4 );
function action_wc_checkout_create_order_line_item( $item, $cart_item_key, $values, $order ) {

    // Get the shipping delay
    $value = $values['data']->get_meta( 'shipping_delay_for_out_of_stock_items' );

    if( ! empty( $value ) ) {
        // Save it and display it
        $item->update_meta_data( __( 'Shipping Delay', 'woocommerce' ), $value );
    }
}   

Код находится в файле functions.php вашей активной дочерней темы (или активной темы). Проверено и работает.

Другие вопросы по тегам