guard( 'manage_woocommerce', 'manage_options', 'wpcafe_manage_orders', 'wpcafe_view_all_orders', 'wpcafe_view_own_orders' ); if ( $check ) { return $check; } if ( ! function_exists( 'wc_get_order' ) ) { return [ 'error' => 'WooCommerce is not active.' ]; } if ( $order_id <= 0 ) { return [ 'error' => 'order_id must be a positive integer.' ]; } try { $request = new \WP_REST_Request( 'GET', '/wpcafe/v2/food-orders/' . $order_id ); $request->set_url_params( [ 'id' => $order_id ] ); $controller = new \WpCafe\FoodOrder\Controllers\Food_Order_Controller(); $result = $this->extract_response( $controller->get_item( $request ), 'Order not found.' ); if ( isset( $result['error'] ) ) { return $result; } $order = $this->pluck( $result, [ 'id', 'number', 'status', 'date_created', 'customer_name', 'customer_email', 'items_count', 'total', 'currency', 'payment_method', 'billing_address', 'shipping_address', 'customer_note', 'subtotal', 'total_tax', 'shipping_total' ] ); $order['line_items'] = $this->shape_rows( $result['line_items'] ?? [], fn( $item ) => $this->pluck( $item, [ 'name', 'quantity', 'subtotal', 'total', 'sku' ] ) ); return $order; } catch ( \Throwable $e ) { Log::error( 'Wpcafe_Get_Food_Order_Tool error', [ 'error' => $e->getMessage() ] ); return [ 'error' => 'Failed to retrieve food order: ' . $e->getMessage() ]; } } }