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