0

0

获取 WooCommerce 客户订单信息:完整指南

DDD

DDD

发布时间:2025-11-16 12:06:33

|

503人浏览过

|

来源于php中文网

原创

获取 woocommerce 客户订单信息:完整指南

本文档旨在指导开发者如何在 WooCommerce 后台订单编辑页面获取当前及之前的客户订单信息,特别是账单地址。我们将提供多种方法,包括获取所有已完成订单、限制订单数量以及精确获取前一订单的账单地址,并附带详细代码示例。

获取客户订单信息

在 WooCommerce 开发中,有时需要在订单管理页面获取客户的历史订单信息,例如获取之前的账单地址。以下将介绍几种实现方法,并提供相应的代码示例。

方法一:获取所有已完成的订单(排除当前订单)

此方法获取指定客户的所有已完成订单(不包括当前正在编辑的订单)。

add_action( 'woocommerce_admin_order_data_after_shipping_address', 'edit_woocommerce_order_page', 10, 1 );

function edit_woocommerce_order_page($order){
    $customer_id =  $order->get_user_id();
    // 检查是否为访客订单
    if($customer_id != 0):
        $args = array(
            'customer_id' => $customer_id,
            'status' => array('wc-completed'), // 可以根据需要修改订单状态
            'exclude' => array( $order->get_id() ), // 排除当前订单
        );
        $orders = wc_get_orders( $args );
        if($orders):
            foreach($orders as $k=>$order):
                echo '

账单地址:'.$order->get_billing_address_1().'

白果AI论文
白果AI论文

论文AI生成学术工具,真实文献,免费不限次生成论文大纲 10 秒生成逻辑框架,10 分钟产出初稿,智能适配 80+学科。支持嵌入图表公式与合规文献引用

下载
'; endforeach; endif; endif; }

代码解释:

  1. add_action( 'woocommerce_admin_order_data_after_shipping_address', 'edit_woocommerce_order_page', 10, 1 );:将自定义函数 edit_woocommerce_order_page 挂载到 WooCommerce 后台订单编辑页面的 woocommerce_admin_order_data_after_shipping_address 钩子上。
  2. $customer_id = $order->get_user_id();:获取当前订单的客户 ID。
  3. if($customer_id != 0)::判断是否为注册用户订单(访客订单的客户 ID 为 0)。
  4. $args = array(...):定义查询参数,包括客户 ID、订单状态(默认为 wc-completed,即已完成)以及需要排除的订单 ID(当前订单)。
  5. $orders = wc_get_orders( $args );:使用 wc_get_orders() 函数根据参数获取订单对象数组。
  6. if($orders)::判断是否获取到订单。
  7. foreach($orders as $k=>$order)::循环遍历订单数组,输出每个订单的账单地址。
  8. echo '

    账单地址:'.$order->get_billing_address_1().'

    ';:输出账单地址信息。

注意事项:

  • 'status' => array('wc-completed'):可以根据实际需求修改订单状态,例如 'status' => array('wc-processing', 'wc-completed') 获取正在处理和已完成的订单。
  • 此方法会获取客户的所有已完成订单,如果客户订单数量较多,可能会影响页面加载速度。

方法二:限制订单数量

此方法与方法一类似,但限制了获取的订单数量。

add_action( 'woocommerce_admin_order_data_after_shipping_address', 'edit_woocommerce_order_page', 10, 1 );

function edit_woocommerce_order_page($order){
    $customer_id =  $order->get_user_id();
    // 检查是否为访客订单
    if($customer_id != 0):
        $args = array(
            'customer_id' => $customer_id,
            'status' => array('wc-completed'), // 可以根据需要修改订单状态
            'limit' => 2, // 限制获取的订单数量为 2
        );
        $orders = wc_get_orders( $args );
        if($orders):
            foreach($orders as $k=>$order):
                echo '

账单地址:'.$order->get_billing_address_1().'

'; endforeach; endif; endif; }

代码解释:

与方法一相比,此方法增加了一个 'limit' => 2 参数,用于限制获取的订单数量为 2。

注意事项:

  • 'limit' => 2:可以根据实际需求修改限制的订单数量。
  • 此方法获取的是最新的 2 个订单。

方法三:获取当前订单和前一个订单

此方法精确获取当前订单和前一个订单的信息。

add_action( 'woocommerce_admin_order_data_after_shipping_address', 'edit_woocommerce_order_page', 10, 1 );

function edit_woocommerce_order_page($order){
    $customer_id =  $order->get_user_id();
    // 获取当前订单ID
    $order_id = $order->get_id();
    if($customer_id != 0):
        $args = array(
            'customer_id' => $customer_id,
            'status' => array('wc-completed'), // 可以根据需要修改订单状态
            'return' => 'ids', // 返回订单ID
            'posts_per_page' => -1 // 获取所有订单
        );
        $all_order_ids = wc_get_orders( $args );
        // 获取当前订单的键
        $all_order_id_keys = array_flip(array_keys($all_order_ids));
        $current_order_key = array_keys($all_order_ids, $order_id);
        // 获取所有订单ID的值
        $all_order_id_values = array_values($all_order_ids);
        // 根据当前订单的键获取前一个订单ID
        $previous_order_id = $all_order_id_values[$all_order_id_keys[$current_order_key[0]]+1];
        $order_args = array(
            'post__in' => array($order_id,$previous_order_id),
        );
        $orders = wc_get_orders( $order_args );
        if($orders):
            foreach($orders as $k=>$order):
                echo $order->get_id(); // 用于测试
                echo '

账单地址:'.$order->get_billing_address_1().'

'; endforeach; endif; endif; }

代码解释:

  1. $args = array(...):定义查询参数,'return' => 'ids' 表示返回订单 ID,'posts_per_page' => -1 表示获取所有订单。
  2. $all_order_ids = wc_get_orders( $args );:获取客户的所有订单 ID。
  3. $all_order_id_keys = array_flip(array_keys($all_order_ids));:将订单 ID 数组的键值互换,方便查找当前订单的键。
  4. $current_order_key = array_keys($all_order_ids, $order_id);:获取当前订单在订单 ID 数组中的键。
  5. $all_order_id_values = array_values($all_order_ids);:获取所有订单 ID 的值。
  6. $previous_order_id = $all_order_id_values[$all_order_id_keys[$current_order_key[0]]+1];:根据当前订单的键,获取前一个订单的 ID。
  7. $order_args = array(...):定义查询参数,'post__in' => array($order_id,$previous_order_id) 表示获取当前订单和前一个订单。
  8. $orders = wc_get_orders( $order_args );:根据参数获取订单对象数组。

注意事项:

  • 此方法需要获取客户的所有订单 ID,然后再根据当前订单的 ID 查找前一个订单的 ID。
  • 如果当前订单是客户的第一个订单,则 $previous_order_id 可能为空。需要添加相应的判断逻辑。
  • 此方法假设订单 ID 是连续的。如果订单 ID 不连续,则可能无法正确获取前一个订单。

总结

本文介绍了三种获取 WooCommerce 客户订单信息的方法,开发者可以根据实际需求选择合适的方法。需要注意的是,在获取大量订单信息时,应考虑性能问题,避免影响页面加载速度。同时,需要对可能出现的异常情况进行处理,例如访客订单、订单不存在等。

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

751

2023.08.22

php中foreach用法
php中foreach用法

本专题整合了php中foreach用法的相关介绍,阅读专题下面的文章了解更多详细教程。

44

2025.12.04

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

3

2026.01.20

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

55

2026.01.19

java用途介绍
java用途介绍

本专题整合了java用途功能相关介绍,阅读专题下面的文章了解更多详细内容。

67

2026.01.19

java输出数组相关教程
java输出数组相关教程

本专题整合了java输出数组相关教程,阅读专题下面的文章了解更多详细内容。

37

2026.01.19

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

10

2026.01.19

xml格式相关教程
xml格式相关教程

本专题整合了xml格式相关教程汇总,阅读专题下面的文章了解更多详细内容。

11

2026.01.19

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

16

2026.01.19

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号