Сохраните индивидуальную дату доставки из атрибута продукта в заказе WooCommerce - PullRequest
1 голос
/ 13 июля 2020

У меня есть специальный атрибут, в котором у товаров разное время получения. Я хочу добавить эти даты в качестве настраиваемого поля в мои заказы w c, чтобы уведомить моих клиентов через cronjob о том, что заказ готов к отправке.

с кодом ниже я получаю неправильную дату, может ли кто-нибудь подскажите что тут не так?

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

1 Ответ

2 голосов
/ 13 июля 2020

Лучше пропустить oop через элементы корзины и сохранить дату в этой настраиваемой подключенной функции, после размещения заказа перед сохранением данных:

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

Код входит в функции. php файл ваша активная дочерняя тема (или активная тема). Он должен работать.

Но если в заказе много разных элементов корзины, вам следует переосмыслить ситуацию по-другому, поскольку этот код будет принимать дату доставки первого элемента корзины (или последний, если вы удалите break;) .

Связанные: Получить элементы заказа и WC_Order_Item_Product в WooCommerce 3

...