Ограничить тип заказа, чтобы избежать ошибок при оформлении заказа в WooCommerce - PullRequest
1 голос
/ 15 апреля 2019

Я хочу отобразить отчет, основанный на статусе заказа, если он завершен, затем отобразить некоторые данные

, но он работает со всеми статусами заказа, например, если я удерживаю, он получает данные, но когда я помещаюзавершено Я получаю эту ошибку

Неустранимая ошибка: вызов неопределенного метода 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 ]

1 голос
/ 15 апреля 2019

Проблема связана с типом заказа , который должен быть "магазинным заказом" ... Есть 2 способа:

1) Проверить тип заказа , который должно быть "shop_order" (но не "shop_order_refund") .Таким образом, вы можете использовать метод get_type (), который также работает для WC_Order_Refund класса, например:

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

Оба пути помогут избежать этой фатальной ошибки

1 голос
/ 15 апреля 2019

Для получения списка заказов завершено, вы можете использовать это

if ($order->payment_complete()){

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...