Guarde y muestre metadatos personalizados del producto en pedidos y correos electrónicos de WooCommerce

2 minutos de lectura

Guarde y muestre metadatos personalizados del producto en pedidos y
phriquez

Bien, básicamente creamos un campo personalizado usando ACF en nuestra tienda WooCommerce para agregar un aviso de “Retraso en el envío” para productos específicos.

Aquí hay una demostración de lo que logramos: https://www.safe-company.com/shop/machines/uvc-disinfection-lamp/

Imagen de referencia de página de un solo producto

Luego logramos colocar este aviso en la página de un solo producto usando Elementor (un creador de páginas) y luego agregar esta información a los datos del artículo en el carrito y la página de pago con el siguiente código agregado a nuestras funciones.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;
}

Campo personalizado en Meta del artículo desde la página del carrito

Nuestro problema ahora es que necesitamos agregar este aviso de retraso en el envío al correo electrónico (mostrar debajo de cada artículo que contiene estos datos respectivamente) y también en la página de pedido. ¿Cómo podría hacerse eso? Ya que revisé un montón de hilos sobre esto, pero todos se realizan usando campos dinámicos (que el usuario completa al comprar), pero nuestro caso es bastante diferente.

¡¡Por favor ayuda!!

Lo siguiente guardará su campo personalizado como metadatos del artículo de pedido y lo mostrará en todas partes:

// 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 );
    }
}   

El código va en el archivo functions.php de su tema secundario activo (o tema activo). Probado y funciona.

  • ¡Muchas gracias! Esto logra exactamente lo que necesitábamos. ¡Que tenga un lindo día!

    – phriquez

    22 de julio de 2020 a las 12:22

  • ¡Hecho! Gracias

    – phriquez

    22 de julio de 2020 a las 16:07

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad