显示基于 WooCommerce 购物车商品库存的预计交货日期范围

Display an estimated delivery date range based on WooCommerce cart item stock

我正在尝试根据购物车中产品的库存状态在购物车中输出预计交货日期。

我有点成功,但现在我被困住了。

这是我到目前为止所写的。它进入 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 天。但我不知道如何管理它。 最好的输出是这种格式:

预计周五发货。 14.7 - 周三。 19.7

我什至不确定

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

是正确的方法。

我有两种产品,一种可以在1-4天内发货,另一种可以在14-21天内发货。现在是第二个问题。当两种类型都在购物车中时,应选择较长的运输时间。

有什么想法吗?


更新:

该代码应检查购物车中每件商品的库存数量。 如果所有项目的库存数量都大于 0,则它应反映作为日期给出的 1 到 4 个工作日的估计运输时间。

如果购物车中有一件商品的库存数量为 0 或以下,它应该回显作为日期给出的 14 - 21 个工作日的估计运输时间。即使购物车中所有其他商品的库存数量都大于 0。

工作日应该是周一到周五。如果代码也能识别假期,那就太好了,例如圣诞节、新年等。

谢谢

The solution from LoicTheAztec works perfect. Now I tried to add some more option to it.

如果 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;
}

from this post

到目前为止这有效,管理页面中有一个订单自定义选项卡。现在我尝试将 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() 的输出?

更新 4(2018 年 9 月)

下面的代码将检查购物车中每件商品的库存数量。

1) 如果所有购物车商品都是 "in stock",它将回显作为日期给出的 1 到 4 个工作日的预计运送时间。

2) 如果一个购物车商品是 "out of stock",它将回显作为日期给出的 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) {
        // The cart item stock quantity
        $stock = $cart_item['data']->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 文件或任何插件文件。

此代码已经过测试并且有效