You need to enable JavaScript to run this app. 使用Woocommerce Advanced Export导出当日WooCommerce预订订单的代码报错求助
优惠活动
大模型
产品
解决方案
定价
更多

使用Woocommerce Advanced Export导出当日WooCommerce预订订单的代码报错求助

自定义代码实现当日预订记录导出的开发问题

基础情况

  • 使用环境为搭载WooCommerce的电商站点,同时安装两个配套插件:WooCommerce Booking(预订功能插件)、WooCommerce Advanced Export(高级订单导出插件)
  • 核心需求:执行订单导出操作时,仅筛选导出当日的预订记录,排除其他非当日、非预订类的订单数据
  • 已完成的前置配置:搭建好目标导出表格,完成导出规则、字段映射的全部相关配置

遇到的异常

  1. 不加载自定义筛选代码时,导出流程默认输出站点全量订单,无法实现当日预订的筛选效果
  2. 加载自行编写的筛选代码时,程序直接触发报错,无法正常运行导出流程,对应报错截图见原提问附图

已尝试编写的代码

第一版测试代码

参考现有过滤器示例的逻辑编写:

// 原参考示例注释:仅导出总金额大于10的订单
add_filter( 'woe_order_export_started',  function ( $order_id ) { 
  $order = new WC_Order($order_id);
  return ($order->get_booking_field_start_date() = str_replace( '{today}', $today, $settings));
});

第二版调整代码

因不确定第一版调用的预订字段是否正确,调整字段获取方法后写出第二版测试代码:

// 原参考示例注释:仅导出总金额大于10的订单
add_filter( 'woe_order_export_started',  function ( $order_id ) { 
  $order = new WC_Order($order_id);
  return ($order->woe_get_order_product_value_booking_start_date() = str_replace( '{today}', $today, $settings));
});

原编写代码存在的核心问题

  1. 过滤器逻辑认知偏差:woe_order_export_started过滤器的返回值为布尔类型,返回true则将当前订单纳入导出范围,返回false则跳过该订单。原代码中使用赋值运算符=替代比较运算符,且未定义$today、$settings两个变量,会直接触发语法报错。
  2. 字段获取逻辑错误:WooCommerce Booking的预订开始日期属于独立的预订对象属性,既不是订单对象的内置方法,也不是WooCommerce Advanced Export自带的调用方法,无法通过$order->xxx()的链式调用直接获取。
  3. 筛选逻辑错误:原代码使用字符串匹配替换的方式判断日期,没有实际完成「预订日期等于当日」的对比判断。

适配需求的正确实现代码

将以下代码添加到主题的functions.php文件或自定义功能插件中即可实现目标功能:

add_filter( 'woe_order_export_started', function( $order_id ) {
    // 默认状态为不导出当前订单
    $allow_export = false;
    // 获取标准化订单对象
    $order = wc_get_order( $order_id );
    // 遍历订单下的所有商品行项目
    foreach( $order->get_items() as $item ) {
        // 获取行项目关联的预订ID
        $booking_id = wc_get_order_item_meta( $item->get_id(), '_booking_id', true );
        if( $booking_id ) {
            // 加载对应预订对象
            $booking = get_wc_booking( $booking_id );
            // 格式化预订开始日期为标准年月日格式
            $booking_start_date = date( 'Y-m-d', $booking->get_start() );
            // 对比是否为当日日期
            if( $booking_start_date === date( 'Y-m-d' ) ) {
                $allow_export = true;
                break;
            }
        }
    }
    // 返回布尔值控制导出范围
    return $allow_export;
});

代码说明

  • 代码通过WooCommerce Booking官方内置函数获取预订关联数据,无需手动拼接自定义字段名,可避免因字段调用错误触发的程序报错。
  • 日期对比环节统一使用Y-m-d格式,可规避时区差异、时间格式不统一导致的判断失效问题。
  • 遍历订单行项目时,只要匹配到一条当日的预订记录,就将对应订单纳入导出范围,符合实际业务操作习惯。

内容的提问来源于stack exchange,提问作者Alasdair MacEwan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.04 04:15:04