/** * Get the order data format for a single column per line item, compatible with the CSV Import Suite plugin * * @since 3.0 * @param array $order_data an array of order data for the given order * @param WC_Order $order the WC_Order object * @return array modified order data */ private function get_legacy_import_one_column_per_line_item($order_data, WC_Order $order) { $count = 1; // add line items foreach ($order->get_items() as $_ => $item) { // sku/qty/price $product = $order->get_product_from_item($item); if (!is_object($product)) { $product = new WC_Product(0); } $sku = $product->get_sku(); // note that product ID must be prefixed with `product_id:` so the importer can properly parse it vs. the SKU $product_id = SV_WC_Plugin_Compatibility::product_get_id($product); $line_item = array($sku ? $sku : "product_id:{$product_id}", $item['qty'], $order->get_line_total($item)); // Add item meta $item_meta = new WC_Order_Item_Meta($item); $formatted_meta = $item_meta->get_formatted(); if (!empty($formatted_meta)) { foreach ($formatted_meta as $meta_key => $meta) { // remove newlines $label = str_replace(array("\r", "\r\n", "\n"), '', $meta['label']); $value = str_replace(array("\r", "\r\n", "\n"), '', $meta['value']); // escape reserved chars (:;|) $label = str_replace(array(': ', ':', ';', '|'), array('\\: ', '\\:', '\\;', '\\|'), $meta['label']); $value = str_replace(array(': ', ':', ';', '|'), array('\\: ', '\\:', '\\;', '\\|'), $meta['value']); $line_item[] = wp_kses_post($label . ': ' . $value); } } $order_data["order_item_{$count}"] = implode('|', $line_item); $count++; } $count = 1; foreach ($order->get_items('shipping') as $_ => $shipping_item) { $order_data["shipping_method_{$count}"] = $shipping_item['method_id']; $order_data["shipping_cost_{$count}"] = wc_format_decimal($shipping_item['cost'], 2); $count++; } // fix order numbers $order_data['order_id'] = $order->id; $order_data['order_number_formatted'] = get_post_meta($order->id, '_order_number_formatted', true); $order_data['order_number'] = get_post_meta($order->id, '_order_number', true); // fix customer user $user = new WP_User($order_data['customer_id']); $order_data['customer_id'] = $user->user_email; return $order_data; }