Я пытаюсь вывести предполагаемую дату поставки в корзину, основываясь на состоянии запаса продуктов в корзине.
Я был немного успешным, но теперь я застрял.
Это то, что я написал до сих пор. Он входит в функцию 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 вашей активной дочерней темы (или темы), а также в любом файле плагина.
Этот код проверен и работает