WooCommerce获取偏移-1的用户上一次订单日期方案问询
解决方案:获取客户上一次有效订单日期(排除当前订单)
核心思路:通过当前订单的客户ID,查询该客户所有已完成/处理中的订单,排除当前订单后按日期倒序取第一条,即可得到所需的上一次购买日期。
步骤1:添加自定义函数到主题/插件
将以下代码添加到你的主题functions.php文件,或自定义功能插件中:
function get_customer_previous_order_date( $current_order_id ) { // 获取当前订单对象 $current_order = wc_get_order( $current_order_id ); if ( ! $current_order ) return false; $customer_id = $current_order->get_customer_id(); if ( ! $customer_id ) return false; // 查询客户的历史订单(排除当前订单,只取有效状态) $args = array( 'customer_id' => $customer_id, 'exclude' => array( $current_order_id ), 'status' => array( 'wc-completed', 'wc-processing' ), // 可根据业务调整订单状态 'limit' => 1, 'orderby' => 'date', 'order' => 'DESC', ); $previous_orders = wc_get_orders( $args ); // 处理无历史订单的情况 if ( empty( $previous_orders ) ) { return '无历史订单'; } // 获取并格式化订单日期 $previous_order = reset( $previous_orders ); return $previous_order->get_date_created()->date_i18n( 'Y年m月d日' ); // 可自定义日期格式 }
步骤2:在PDF打印单模板中调用函数
找到你定制的PDF模板文件(通常位于wp-content/themes/你的主题/woocommerce/pdf-invoices/目录下,比如自定义生产单模板),在需要显示“上一次订单”的位置插入以下代码:
<?php $previous_order_date = get_customer_previous_order_date( $order->get_id() ); if ( $previous_order_date ) { echo '<p>上一次订单:' . esc_html( $previous_order_date ) . '</p>'; } ?>
关键细节说明
- 订单状态过滤:代码默认仅包含
completed和processing状态的订单,可根据客户业务需求调整status参数(比如添加wc-on-hold等)。 - 日期格式自定义:
date_i18n()函数会适配站点语言输出本地化日期,可修改格式字符串(如'Y-m-d')调整显示样式。 - 排除当前订单:通过
exclude参数确保查询时跳过当前正在打印的订单,无论延迟多久打印都能准确获取上一次订单日期。 - 边界场景处理:若客户为首次下单,会显示“无历史订单”,可根据需求修改提示文本。
内容的提问来源于stack exchange,提问作者Two Pines Brian
相关产品推荐
相关产品推荐

