Отобразить предполагаемый диапазон дат поставки, основанный на запасе товаров в корзине WooCommerce

Я пытаюсь вывести предполагаемую дату поставки в корзину, основываясь на состоянии запаса продуктов в корзине.

Я был немного успешным, но теперь я застрял.

Это то, что я написал до сих пор. Он входит в функцию function.php

function lieferzeit() { global $woocommerce; $cart_items = $woocommerce->cart->get_cart(); foreach ($cart_items as $variation) { $variation_id = $variation['variation_id']; $variation_obj = new WC_Product_variation($variation_id); $stock = $variation_obj->get_stock_quantity(); } echo $stock; //outputs the in stock amount successfully } add_filter ( 'woocommerce_cart_collaterals', 'lieferzeit'); 

Теперь я пытаюсь добавить расчетную дату, но здесь я застрял

 function lieferzeit() { global $woocommerce; $cart_items = $woocommerce->cart->get_cart(); foreach ($cart_items as $variation) { $variation_id = $variation['variation_id']; $variation_obj = new WC_Product_variation($variation_id); $stock = $variation_obj->get_stock_quantity(); } for ($i=0; $i < count($stock) ; $i++) { echo "Voraussichtliche Lieferung Date! "; } } add_filter ( 'woocommerce_cart_collaterals', 'lieferzeit'); 

Здесь должен быть определен вывод даты. С сегодняшнего дня +1 день до сегодняшнего дня +4 дня. Но у меня нет идеи, как это можно сделать. Лучшим результатом будет такой формат:

Предполагаемая доставка Fri. 14.7 – ср. 19,7

Я даже не чувствую, если

 for ($i=0; $i < count($stock) ; $i++) { 

это правильный путь.

У меня есть два типа продуктов: один может быть отправлен в течение 1-4 дней, а другой – в течение 14-21 дней. Теперь вторая проблема. Когда оба типа находятся в корзине, следует выбрать более высокое время отгрузки.

Есть ли идеи?


Обновить:

Код должен проверять количество запаса каждого товара в корзине. Если все предметы имеют количество запасов больше 0, оно должно повторить расчетное время доставки от 1 до 4 рабочих дней, указанных в качестве даты.

Если в корзине есть один товар с количеством запасов 0 или ниже, он должен повторить время доставки оценки в течение 14 – 21 рабочих дней, указанное в качестве даты. Даже если все остальные предметы в корзине имеют количество запасов больше 0.

Рабочие дни должны быть понедельника до пятницы. Очень аккуратно было бы, если бы код распознавал праздники, например, рождество, новый год и т. Д.

благодаря

Решение LoicTheAztec работает идеально. Теперь я попытался добавить еще один вариант.

Было бы неплохо, если вывод function lieferzeit() будет отображаться на странице сведений о порядке администрирования. Чтобы создать пользовательскую панель администратора на боковой панели, я обнаружил

  add_action( 'add_meta_boxes', 'add_meta_boxes' ); function add_meta_boxes() { add_meta_box( 'woocommerce-order-my-custom', __( 'Order Custom' ), 'order_my_custom', 'shop_order', 'side', 'default' ); } function order_my_custom() { echo $lieferzeit; } 

из этого поста

Это работает до сих пор, и на странице администратора есть вкладка «Заказ на заказ». Теперь я попытался сохранить вывод function lieferzeit() в переменной.

 $from = str_replace($days_en, $days_ge, $from); $to = str_replace($days_en, $days_ge, $to); $lieferzeit = array($from, $to); 

Но кажется, что function add_meta_boxes() и function order_my_custom() ничего не знают об переменной $lieferzeit .

Есть ли другой способ сохранить и вызвать вывод function lieferzeit() ?

Обновление 3 (обработка простых и переменных продуктов | добавлена ​​функция перевода) :

В приведенном ниже коде будет проверяться количество запасов каждого товара в корзине.

1) Если все позиции корзины «находятся в запасе», это будет означать приблизительное время доставки от 1 до 4 рабочих дней, указанных в качестве даты.

2) Если одна из позиций корзины «отсутствует», она повторит расчетное время доставки от 14 до 21 рабочего дня, указанного в качестве даты.

Но я не буду признавать праздники

Вот этот код:

 add_filter ( 'woocommerce_cart_collaterals', 'lieferzeit'); function lieferzeit() { $all_items_in_stock = true; // initializing // Iterating through cart items (to get the stock info) foreach (WC()->cart->get_cart() as $cart_item) { # HANDLING SIMPLE AND VARIABLE PRODUCTS // Variable products $variation_id = $cart_item['variation_id']; if( 0 != $variation_id) { $variation_obj = new WC_Product_variation($variation_id); $stock = $variation_obj->get_stock_quantity(); } else { // Simple products $product_id = $cart_item['product_id']; $product_obj = new WC_Product($product_id); $stock = $product_obj->get_stock_quantity(); } if( $stock <= 0 ){ // if an item is out of stock $all_items_in_stock = false; break; // We break the loop } } // Items "in stock" (1 to 4 week days) if( $all_items_in_stock ){ for( $start=0, $count=-1 ; $count < 4; $start++ ){ $weekdays = date('w', strtotime("+$start days")); if( $weekdays > 0 && $weekdays < 6 ){ $count++; echo date('D j (w)', strtotime("+$start days")).', '; if($count == 1){ $from = date('D. j/n', strtotime("+$start days") ); } elseif($count == 4) { $to = date('D. j/n', strtotime("+$start days") ); } } } } else { // 1 is Items Out of stock (14 to 21 week days) for( $start=0, $count=-1 ; $count < 21; $start++ ){ $weekdays = date('w', strtotime("+$start days")); if( $weekdays > 0 && $weekdays < 6 ){ $count++; if($count == 14){ $from = date('D. j/n', strtotime("+$start days") ); } elseif($count == 21) { $to = date('D. j/n', strtotime("+$start days") ); } } } } ## TRANSLATION ## // DAYS IN ENGLISH (Source) $days_en = array('Mon','Tue','Wed','Thu','Fri'); // TRANSLATE the DAYS in GERMAN (replacement) $days_ge = array('Mmm','Ttt','Www','Thh','Fff'); $from = str_replace( $days_en, $days_ge, $from ); $to = str_replace( $days_en, $days_ge, $to ); ## OUTPUT ## echo "<br><br>Estimated shipping $from - $to"; } 

Код идет в файле function.php вашей активной дочерней темы (или темы), а также в любом файле плагина.

Этот код проверен и работает