wordpress 显示基于WooCommerce购物车项目库存的预计交货日期范围

csga3l58  于 2022-11-22  发布在  WordPress
关注(0)|答案(1)|浏览(192)

我尝试根据购物车中产品的库存状态输出购物车中的预计交货日期。
我曾经有点成功,但现在我被卡住了。
这是我目前所写的内容,它放在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天内发货,另一种是1 - 4 -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;
}

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()的输出?

x8diyxa7

x8diyxa71#

更新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";
}
  • 代码在您的活动子主题(或主题)的function.php文件中,也可以在任何插件文件中。*

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

相关问题