根据 WooCommerce 购物车商品库存显示预计交货日期范围

2023-12-20

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

我取得了一点成功,但现在我陷入了困境。

这是我到目前为止所写的。它位于 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 天内发货。现在是第二个问题。当两种类型都在购物车中时,应选择较长的运输时间。

有一些想法吗?


Update:

该代码应检查购物车中每件商品的库存数量。 如果所有商品的库存数量都大于 0,则应回显以日期形式给出的 1 到 4 个工作日的预计发货时间。

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

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

Thanks

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

从这篇文章 https://stackoverflow.com/questions/24179529/how-to-add-custom-fields-for-woocommerce-order-page-admin

到目前为止,这有效,并且管理页面中有一个“订单自定义”选项卡。现在我尝试存储的输出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() and function order_my_custom()对变量一无所知$lieferzeit.

是否有另一种方法来存储和调用输出function lieferzeit() ?


Update 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 文件中或任何插件文件中。

这段代码已经过测试并且可以工作

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据 WooCommerce 购物车商品库存显示预计交货日期范围 的相关文章

随机推荐

  • 多个目标框架项目:不同框架上同一 NuGet 包的不同版本?

    我使用 EntityFramework 5 0 13 组合了一个 Net 5 for Windows 应用程序 现在我们尝试在尚未安装 Net 5 框架的特定服务器上运行它 管理服务器的好人告诉我 他们尝试安装新东西 但似乎无法使应用程序运
  • 通过滑动手势关闭键盘

    在 Messages app 中 您可以通过滚动列表视图来关闭键盘 需要明确的是 它不仅仅是响应scrollViewDidScroll事件 当您向下滑动时 键盘会随着您的手指进行跟踪 知道这是如何做到的吗 从 iOS 7 开始 您可以使用
  • 绑定适配器实时数据值始终为空

    由于某种原因 两个绑定适配器的第二个参数值总是返回 null 我无法弄清楚为什么 我正在选择一个plantIndividual从概述片段中的 RecyclerView 并使用它导航到详细信息页面 单个片段 两个 Fragment 共享一个
  • 如何动态创建 PWA manifest.json?

    我在 manifest json 中使用静态变量创建了一个功能 例如 name short name start url 它对于 添加到主屏幕 运行良好 当我动态设置manifest json变量时 添加到屏幕不起作用 基本上我有一个电子商
  • 读取位置 0x0000000c 访问冲突

    在我的应用程序中 我使用 LowLevelKeyboardProc 禁用 开始 菜单 但是当我连续按 tab 键时出现以下错误 错误 0x00352d58 处未处理的异常 Timer soosai exe 0xC0000005 访问 违规读
  • 创建之前执行的函数[重复]

    这个问题在这里已经有答案了 我不是 JavaScript 专家 但我发现了一些这样的代码 a function a alert a 我很惊讶地发现它可以工作 我认为类似的东西在 Python 中是行不通的 我期望该功能a创建之前不能执行 解
  • 语法突出显示不适用于 IVsInvisibleEditor

    我创建了 IVsInvisibleEditor 的实例 我使用以下代码来实现此目的 public IWpfTextViewHost CreateEditor string targetFile var componentModel ICom
  • 如何使用 JAVA 高级 REST 客户端发出 Elasticsearch 的 Point InTime API 请求

    如果有人可以向我指出一种使用 REST 高级客户端从 JAVA 或 JAVA 中的任何其他方式执行 Elasticsearch 7 10 1 中新引入的 Point In Time API 请求的方法 那将会很有帮助 传输客户端除外 因为它
  • 创建圆角矩形纹理2D

    我正在构建一个带有对话框的游戏 我希望能够以与最终幻想系列非常相似的风格以程序方式生成盒子的纹理 想像最终幻想VII http i79 photobucket com albums j148 Xngears Final 20Fantasy
  • 通过chrome浏览器扩展调用C dll

    我想通过访问智能卡winscard dll通过 Chrome 扩展 我是 Chrome 扩展开发的新手 但是据我所知 解压模式下的 chrome 扩展是一个由一些 html 页面 背景 普通 可选 覆盖 tabs create window
  • 使用 HTML5 fetch API 允许 Access-Control-Allow-Origin 标头

    我正在使用 HTML5 获取 API var request new Request https davidwalsh name demo arsenal json fetch request then function response
  • 单击 div 时在两个 div 之间翻转

    我想要与示例中相同的翻转 http jsfiddle net lakario VPjX9 http jsfiddle net lakario VPjX9 我想要的唯一不同是两个 div 之间的翻转 page1 page2 将在我单击 the
  • 在python中使用pyodbc获取MSSQL表列名

    我正在尝试使用 pyodbc 获取 mssql 表列名称 并收到错误消息 ProgrammingError No results Previous SQL was not a query 这是我的代码 class get Fields de
  • 我使用哪种 JSON 内容类型?

    有很多 标准 JSON http en wikipedia org wiki JSON内容类型 application json application x javascript text javascript text x javascr
  • 如何在D3条形图中添加分隔符

    我的应用程序中有一个使用 D3 绘制的条形图 下面添加了示例代码 在我的图表中 它显示了 12 个月时间段内的月份 因此 根据具体情况 12 月并不总是出现在 x 轴的拐角处 因此 为了显示年份的分隔 我想在图表中显示一个分隔符来分隔两年
  • 构建 FragmentStatePagerAdapter、ViewModel 和 Fragment 列表

    简介 以下问题 根据我的应用程序需求 我需要创建 TabLayout 和 ViewPager 扩展FragmentStatePAgerAdapter Viewpager 由一系列单类型片段组成 我们将其称为 ListFragment Eac
  • 如何将用户的输入添加到Python列表中[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 print This is your Shopping List firstItem input Enter 1st item print
  • Oracle:利用两个索引的优势

    正如您所看到的 Oracle 可以利用两个索引并解决整个查询 而无需通过 rowid 访问表 SELECT Scarti letture GAS tipo campo47 pdf COUNT 1 n FROM out CONSUMI GEE
  • 现有蓝牙设备和Apple MFI

    我正在开发一个需要连接到蓝牙设备的应用程序 我不想在应用程序商店中部署此应用程序 我只需要这个供个人使用 有什么办法可以连接到这个蓝牙设备 它太旧了而且绝对没有经过 MFI 认证 在 MFI 计划的常见问题解答中 http mfi appl
  • 根据 WooCommerce 购物车商品库存显示预计交货日期范围

    我正在尝试根据购物车中产品的库存状态输出购物车中的预计交货日期 我取得了一点成功 但现在我陷入了困境 这是我到目前为止所写的 它位于 function php 文件中 function lieferzeit global woocommer