Guarde la fecha de entrega personalizada del atributo del producto en el pedido de WooCommerce

2 minutos de lectura

avatar de usuario
LovinQuaQua

tengo un atributo personalizado donde los productos tienen diferentes tiempos de recogida. Quiero agregar estas fechas como un campo personalizado a mis pedidos de wc, para notificar a mis clientes a través de cronjob que el pedido está listo para ser recogido.

con el siguiente código obtengo la fecha incorrecta, ¿alguien puede decirme qué está mal aquí?

foreach ( $order->get_items() as $item_id => $item ) {
    $product_id = $item->get_product_id();
    $order_id = $order->get_id();
    $new_product = new WC_Product( $product_id );  // create an object of WC_Product class

    //$product_attribut = $new_product->get_attribute( 'pa_lieferfrequenz' );  // call get_attribute method
    $product_attribut="1week";
    $date = date('d-m-Y', strtotime("+ ' . $product_attribut . '"));
    add_post_meta( $order_id, 'lwb_pickup_time_email_notification', $date );
}

avatar de usuario
LoicTheAztec

Es mejor recorrer los artículos del carrito y guardar la fecha en esta función enganchada personalizada, una vez que se realiza el pedido antes de guardar los datos:

add_action( 'woocommerce_checkout_create_order', 'wc_checkout_create_order_action_callback' );
function wc_checkout_create_order_action_callback( $order ) {
    // Loop through cart items
    foreach ( WC()->cart->get_cart() as $cart_item ) {
        $lieferfrequenz = $cart_item['data']->get_attribute( 'pa_lieferfrequenz' );
        
        if ( ! empty( $lieferfrequenz ) ) {
            // Save the date as custom order meta data
            $order->update_meta_data( 'lwb_pickup_time_email_notification', date('d-m-Y', strtotime("+ '.$lieferfrequenz.'") ) );
            break; /// stop the loop
        }
    }
}

El código va en el archivo functions.php de su tema secundario activo (o tema activo). Debería funcionar.

Pero si hay muchos artículos de carrito diferentes en un pedido, debe volver a pensar las cosas de manera diferente, ya que este código tomará la fecha de entrega del primer artículo de carrito. (o el último, si quitas break;).

Relacionada: Obtenga artículos de pedido y WC_Order_Item_Product en WooCommerce 3

¿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