Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 显示基于购物车项目库存的估计交货日期范围_Php_Wordpress_Woocommerce_Cart_Variations - Fatal编程技术网

Php 显示基于购物车项目库存的估计交货日期范围

Php 显示基于购物车项目库存的估计交货日期范围,php,wordpress,woocommerce,cart,variations,Php,Wordpress,Woocommerce,Cart,Variations,我正在尝试根据购物车中产品的库存状态在购物车中输出估计的交货日期 我曾经有点成功,但现在我被卡住了 这是我到目前为止写的。它位于function.php中 function lieferzeit() { global $woocommerce; $cart_items = $woocommerce->cart->get_cart(); foreach ($cart_items as $variation) { $var

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

我曾经有点成功,但现在我被卡住了

这是我到目前为止写的。它位于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');

到目前为止,这是可行的,在管理页面中有一个订单自定义选项卡。现在我尝试将函数lieferzeit()的输出存储在变量中

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

$lieferzeit = array($from, $to);
但似乎
函数add\u meta\u box()
函数order\u my\u custom()
对变量
$lieferzeit
一无所知

是否有其他方法存储和调用函数lieferzeit()的输出

更新4(2018年9月)

下面的代码将检查购物车中每个项目的库存数量

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) {
        // 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";
}
add_filter('woocommerce_cart_collaterals','lieferzeit');
函数lieferzeit(){
$all\u items\u in\u stock=true;//正在初始化
//迭代购物车项目(获取库存信息)
foreach(WC()->cart->get_cart()作为$cart_项目){
//购物车项目库存数量
$stock=$cart_item['data']->get_stock_quantity();
如果($stock 0&&$weekdays<6){
$count++;
回显日期('D j(w)'、标准时间(“+$start days”)。';
如果($count==1){
$from=日期('D.j/n',标准时间(+$start days”);
}elseif($count==4){
$to=日期('D.j/n',标准时间(+$start days));
}
}
}
}否则{//1为缺货(14至21周)
对于($start=0,$count=-1;$count<21;$start++){
$weekdays=日期('w',strottime(“+$start days”);
如果($weekdays>0&&$weekdays<6){
$count++;
如果($count==14){
$from=日期('D.j/n',标准时间(+$start days”);
}elseif($count==21){
$to=日期('D.j/n',标准时间(+$start days));
}
}
}
}
##翻译##
//英语天数(来源)
$days_en=数组('Mon','Tue','Wed','Thu','Fri');
//用德语翻译日期(替换)
$days_ge=array('Mmm','Ttt','Www','Thh','Fff');
$from=str\u replace($days\u en,$days\u ge,$from);
$to=str\U replace($days\U en,$days\U ge,$to);
##输出##
echo“

预计运费$from-$to”; }
代码位于活动子主题(或主题)的function.php文件或任何插件文件中


此代码经过测试并正常工作

您好LoicTheAztec,非常感谢您的帮助!!真是难以置信。我不知道如果没有你的帮助,我会在这上面花多少天。唯一比我想象的更复杂的事情,就是用德语输出。我非常喜欢这种格式
('D,j.n.,strotime(“+$start days”)
。但是一个简单的增加
setlocale(LC_-TIME,“de_-de”)不起作用。用strftime替换所有strotime也不起作用。即使将dateformat更改为
%a,%d.%m.
,我现在也发现了一些东西。我认为它适用于单一产品。只有当单个产品缺货时才会这样做。对于库存中且交货时间较短的单个产品,它仅显示较长的装运时间。我试图在开头加上这个,但没有用<代码>$simple\u id=$cart\u item['simple\u id']$simple\u obj=新WC\u产品\u simple($simple\u id)$库存简单=$simple\u obj->获取库存数量()然后我添加了伐木<代码>如果($variation\u obj->get\u stock\u quantity()get\u stock\u quantity()现在工作得很好!我做了一些更改,使库存量小于0的产品也处于这种状态。我将
如果(0=$stock)
更改为
如果($stock我只看到你关于产品的问题。Stackoverflow有点混乱:)我使用单一产品和可变产品。但你的解决方案对这两种类型都非常有效!我已经更新了关于简单和可变产品库存的代码…现在应该可以了…*如果需要,你也可以使用stock status
($product_obj->get_stock_status()='instock'){
如果($product_obj->get_stock_status()='OUTOFF'){
*…我希望这次可以
$from = str_replace($days_en, $days_ge, $from);
$to   = str_replace($days_en, $days_ge, $to);

$lieferzeit = array($from, $to);
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";
}