使用WooCommerce的wc_get_orders函数无法获取指定日期完成的全部订单ID的问题
解决WooCommerce wc_get_orders无法获取指定日期已完成订单的问题
我帮你分析下问题所在,你的代码里有两个关键细节没处理对,导致拿不到预期的5个订单:
- 订单状态参数格式错误:WooCommerce的订单状态用的是小写的slug标识符,不是显示名称里的首字母大写格式。你写的
"Completed"应该改成'completed'。 - 日期匹配逻辑不完整:如果直接给
date_completed传单个日期字符串,它只会匹配完成时间精确等于2022-04-19 00:00:00的订单,但实际订单的完成时间肯定是当天的某个具体时分秒,所以必须指定一个覆盖全天的日期范围。
修正后的代码
$args = array( 'status' => 'completed', // 改为小写的状态slug 'return' => 'ids', 'date_completed' => array( 'after' => '2022-04-18 23:59:59', // 覆盖前一天最后一秒到当天结束 'before' => '2022-04-20 00:00:00', ), ); $orders = wc_get_orders( $args ); print_r($orders);
额外优化方案
如果不想手动写固定的前后日期,可以用PHP日期函数动态生成,适配任意目标日期:
$target_date = '2022-04-19'; $args = array( 'status' => 'completed', 'return' => 'ids', 'date_completed' => array( 'after' => date('Y-m-d H:i:s', strtotime($target_date . ' -1 second')), 'before' => date('Y-m-d H:i:s', strtotime($target_date . ' +1 day')), ), );
另外也可以确认下,这些订单确实是系统默认的completed状态,不是你自定义的类似状态(如果有的话),避免状态slug不匹配的问题。
内容的提问来源于stack exchange,提问作者Amal
相关产品推荐
相关产品推荐

