限制订单类型以避免在WooCommerce中完成订单时出错

时间:2019-04-15 08:51:38

标签: php wordpress woocommerce types orders

如果要完成,我想根据订单状态显示报告,然后显示一些数据

但是它适用于所有订单状态,例如,如果我保留它可以获取数据,但是当我完成时会出现此错误

  

致命错误:调用未定义的方法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>';
    }
}

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

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

非常感谢您

2 个答案:

答案 0 :(得分:1)

要获取完整的订单清单卫星,您可以使用此

if ($order->payment_complete()){

}

答案 1 :(得分:1)

问题与应该为“商店订单”的订单类型有关。有两种方法:

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') );

两种方法都可以避免发生致命错误