【问题标题】:Limit order type to avoid errors when completing an order in WooCommerce在 WooCommerce 中完成订单时限制订单类型以避免错误
【发布时间】:2019-09-05 05:21:16
【问题描述】:

我想显示一个基于订单状态的报告,如果它已经完成然后显示一些数据

但它适用于所有订单状态,例如,如果我暂停它会获取数据,但是当我完成时,我会收到此错误

致命错误:调用未定义的方法 WC_Order_Refund::get_order_number()

这是我的代码

    //Get Report for Orders that have status of delivered
foreach( $orders as $order ){
    if ( $order->get_status() === 'completed'){
        $order_data = $order->get_data(); // The Order data
        $items = $order->get_items();
        foreach ( $items as $item ) {
            $product_name = $item->get_name();
            $product_id = $item->get_product_id();
        }
        $orders_completed .=  '<tr><td>' . $order->get_order_number() . '</td>' .
        '<td>' . $order->get_date_created()->date('Y-m-d H:i:s') . '</td>' .
        '<td>' . $order->get_status() . '</td>' .
        '<td>' . $order->get_total() . '</td>' .
        '<td>' . $product_id . '</td>' .
        '<td>' . $product_name . '</td>' .
        '<td>' . $order->get_item_count() . '</td>' .
        '<td>' . $order->get_billing_first_name() . '</td>' .
        '<td>' . $order->get_billing_email() . '</td>' .
        '<td>' . $order->get_billing_phone() . '</td>' .
        '<td>' . $order_payment_method = $order_data['payment_method_title'] . '</td></tr>';
    }
}

如果我将“已完成”更改为“暂停”或任何其他状态,它将起作用并获取数据

但是如何使它与已完成的订单一起使用?

非常感谢

【问题讨论】:

    标签: php wordpress woocommerce types orders


    【解决方案1】:

    要获取已完成的订单列表,您可以使用此

    if ($order->payment_complete()){
    
    }
    

    【讨论】:

    • 感谢您的回答,但我仍然得到 > 错误:调用未定义的方法 WC_Order_Refund::payment_complete()
    • 您的 WooCommerce 版本?
    • 最新版dfd
    • 你正在使用这个 $order = wc_get_order( $order_id );获取订单列表?
    • 我使用$orders = wc_get_orders( array('numberposts' =&gt; -1) ); 获取所有订单
    【解决方案2】:

    问题与应该是“shop order”的order type有关……有2种方式:

    1) 检查订单类型必须是“shop_order”(但不能是“shop_order_refund”)。因此,您可以使用同样适用于 WC_Order_Refund 类的方法 get_type(),例如:

    foreach( $orders as $order ){
        if ( $order->get_type() === 'shop_order' && $order->get_status() === 'completed'){
            $order_data = $order->get_data(); // The Order data
            $items = $order->get_items();
            foreach ( $items as $item ) {
                $product_name = $item->get_name();
                $product_id = $item->get_product_id();
            }
            $orders_completed .=  '<tr><td>' . $order->get_order_number() . '</td>' .
            '<td>' . $order->get_date_created()->date('Y-m-d H:i:s') . '</td>' .
            '<td>' . $order->get_status() . '</td>' .
            '<td>' . $order->get_total() . '</td>' .
            '<td>' . $product_id . '</td>' .
            '<td>' . $product_name . '</td>' .
            '<td>' . $order->get_item_count() . '</td>' .
            '<td>' . $order->get_billing_first_name() . '</td>' .
            '<td>' . $order->get_billing_email() . '</td>' .
            '<td>' . $order->get_billing_phone() . '</td>' .
            '<td>' . $order_payment_method = $order_data['payment_method_title'] . '</td></tr>';
        }
    };
    

    2) 更改 WC_Order_Query,仅针对“shop_order”帖子类型:

    $orders = wc_get_orders( array('limit' => -1, 'type' => 'shop_order') );
    

    两种方法都可以避免出现这个致命错误

    【讨论】:

    • 一如既往的最佳答案。问题解决了,非常感谢
    猜你喜欢
    • 2021-06-15
    • 2016-04-17
    • 1970-01-01
    • 2019-09-18
    • 2020-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多