Woocommerce 获取类似订单的订单商品

Posted

技术标签:

【中文标题】Woocommerce 获取类似订单的订单商品【英文标题】:Woocommerce get order items of similar orders 【发布时间】:2021-04-02 00:11:24 【问题描述】:

在一个插件中,我试图不让用户使用相同的账单信息下类似的订单。 想象一个拥有 John Doe 计费名字和姓氏的用户下了一个包含 product1 和 product2 的订单,而其他人尝试使用相同的计费名字和姓氏下相同或相似的订单(例如包含 product1、product2、product3),而之前的订单仍在处理中。 因此,为了避免这种行为,我试图在放置前验证订单。 如果有任何正在运行的订单具有相同的账单信息,我会抛出 Woocommerce 错误,但我不知道如何确定最后一个订单是否也包含类似的商品! 这是我的代码:

function check_for_duplicate_order($data)


        $data['billing_last_name'];
        $data['billing_first_name'];
        $data['billing_postcode'];
        $meta_query_args = array(
            'relation' => 'OR', // Optional, defaults to "AND"
            array(
                'key'     => '_billing_postcode',
                'value'   => '%' . $data['_billing_postcode'],
                'compare' => 'LIKE'
            ),
            array(
                'key'     => '_billing_phone',
                'value'   => '%' . $data['billing_phone'],
                'compare' => 'LIKE'
            ),
            array(
                'relation' => 'AND',
                array(
                    'key'     => '_billing_first_name',
                    'value'   => $data['billing_first_name'],
                    'compare' => '='
                ),
                array(
                    'key'     => '_billing_last_name',
                    'value'   => $data['billing_last_name'],
                    'compare' => '='
                )
            )
        );
        $query_params = [
            'post_type' => 'shop_order',
            'posts_per_page' => 1,
            'post_status' => array('wc-pending','wc-processing','wc-on-hold'),
            'meta_query' => $meta_query_args

        ];
        $cart_items_ids = [];
        global $woocommerce;
        $items = $woocommerce->cart->get_cart();
        foreach($items as $item => $values) 
            $cart_items_ids[] = $values['data']->get_id();
        

    
    add_action('woocommerce_after_checkout_validation', 'check_for_duplicate_order');

在上面的代码中,我得到了当前的订单账单信息,然后找到其他具有相同账单信息的活动订单,但从这一点开始,我不知道如何找到找到的订单项目,看看在以前的订单中是否也有相同的项目。

【问题讨论】:

【参考方案1】:

我设法找到了一个解决方案,将当前购物车中的商品与之前订单中的商品相匹配:

foreach ($billing_active_order_ids as $active_order_id)
    $order = wc_get_order( $active_order_id );
    foreach ($order->get_items() as $id => $order_item)

        if(in_array($order_item->get_product_id(),$cart_items_ids))
            wc_add_notice($duplicate_order_message, 'error');
            return;
        

    

【讨论】:

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

在 Woocommerce 中获取订单商品名称 [重复]

在 WooCommerce 3 中获取订单商品和 WC_Order_Item_Product

获取 WooCommerce 订单的每个项目的产品类别

如何在 Woocommerce 购物车页面中添加订单备注字段?

如果订单包含来自特定产品类别的商品,则为 WooCommerce 订单号添加前缀

获取产品变体描述以显示在 woocommerce 中的订单项目上?