You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:10:13