获取 Woocommerce 客户订单

Posted

技术标签:

【中文标题】获取 Woocommerce 客户订单【英文标题】:Get Woocommerce customer orders 【发布时间】:2022-01-14 18:11:16 【问题描述】:

是否可以获得当前和以前的客户订单?即我需要每个客户当前订单的账单地址和之前订单的账单地址。

例如,我需要获取每个客户订单的数组,即我需要每个客户订单的账单地址。

所以我有一些代码可以在管理面板的“编辑订单页面”上打印任何文本。

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

function edit_woocommerce_order_page($order)
global $post_id;
$order = new WC_Order( $post_id );
echo '<p><strong>Some text here</strong> ' . get_post_meta($order->get_id(), '_shipping_field_value', true ) . '</p>'; 

如您所见,它会为每个用户显示一些文本。我想我应该得到每个客户的一些数组,并显示带有订单 ID 和帐单地址 1 的订单数组。请检查屏幕截图 Code above adds text in Edit Order page

有可能吗?

【问题讨论】:

订单中有一个“查看其他订单”链接,其中将列出所有客户订单。那么为什么不在显示帐单地址的订单中添加一列呢?为了它的自我列出,这么多地址将来会引起你的问题。但它可能是的。 【参考方案1】:

如果客户不是客人,以下函数将抓取所有已完成的订单。

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();
//Check if its guest or not
if($customer_id != 0):
    $args = array(
        'customer_id' => $customer_id,
        'status' => array('wc-completed'), //Change if needed
        'exclude' => array( $order->get_id() ), // We dont need current order
    );
    $orders = wc_get_orders( $args );
    if($orders):
        foreach($orders as $k=>$order):
            echo '<p><strong>Some text here</strong>'.$order->get_billing_address_1().'</p>';
        endforeach;
    endif;
endif;

限最后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();
    //Check if its guest or not
    if($customer_id != 0):
        $args = array(
            'customer_id' => $customer_id,
            'status' => array('wc-completed'), //Change if needed
            'limit' => 2,
        );
        $orders = wc_get_orders( $args );
        if($orders):
            foreach($orders as $k=>$order):
                echo '<p><strong>Some text here</strong>'.$order->get_billing_address_1().'</p>';
            endforeach;
        endif;
    endif;
    

仅获取当前订单和上一个订单

function edit_woocommerce_order_page($order)
    $customer_id =  $order->get_user_id();
    //We need current order id to know where we start
    $order_id = $order->get_id();
    if($customer_id != 0):
        $args = array(
            'customer_id' => $customer_id,
            'status' => array('wc-completed'), //Change if needed
            'return' => 'ids', // Grab all order ids for customer 
            'posts_per_page' => -1
        );
        $all_order_ids = wc_get_orders( $args );
        //Find current order key 
        $all_order_id_keys = array_flip(array_keys($all_order_ids));
        $current_order_key = array_keys($all_order_ids, $order_id);
        //Grab all values from our array
        $all_order_id_values = array_values($all_order_ids);
        //From all values we look for current order key and we increase that key with 1 to grab prev order id by key
        $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(); // For testing 
                echo '<p><strong>Some text here</strong>'.$order->get_billing_address_1().'</p>';
            endforeach;
        endif;
    endif;

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

【讨论】:

你太棒了,谢谢!但是是否可以不排除当前订单的帐单地址?我的意思是例如客户订单ID是307,但他有310、308、307、300、250。是否可以只显示当前(307)和300。所以它应该只显示当前和以前的订单 只限制为 2 将返回最后 2 并删除排除。我已经更新了我的答案 你太棒了:) 但是当我查看订单号 307(例如)时,它仍然显示订单 310、308。我想查看当前订单和以前的订单。我的意思是,如果我查看订单 310(作为示例),我还需要查看订单 309(作为示例)。是客户的订单。所以我不需要查看订单 311、312、312... 只是当前和以前的订单:)谢谢! @Alina 是同一客户的订单 310 和 309 吗?听起来 309 不是来自同一个客户。我们也在寻找已完成的订单。 是的,来自同一个订单的订单:)谢谢!*

以上是关于获取 Woocommerce 客户订单的主要内容,如果未能解决你的问题,请参考以下文章

sql 从Woocommerce订单获取客户数据

如何从 WooCommerce 中的订单中获取客户详细信息?

Woocommerce:结帐页面后获取订单ID [重复]

结帐后,woocommerce获取订单详情

WooCommerce 在订单接收端点获取订单 ID 和订单密钥 [重复]

在 Woocommerce 订单电子邮件通知中获取用户 ID [重复]