如何在WooCommerce Analytics订单报表中添加订单项名称列并支持CSV导出
问题原因
你当前使用的钩子是旧版本WooCommerce内置报表的触发钩子,不适用于新版的WooCommerce Analytics订单报表模块,同时回调函数的参数、输出格式也不符合导出CSV的要求,所以不会生效。
修正后的完整代码
// 1. 给WooCommerce Analytics订单表格新增列头 add_filter( 'woocommerce_analytics_orders_table_columns', 'add_item_name_column_to_analytics_table' ); function add_item_name_column_to_analytics_table( $columns ) { $new_columns = []; foreach ( $columns as $column_key => $column_label ) { $new_columns[ $column_key ] = $column_label; // 在客户类型列后面插入订单项名称列 if ( 'customer_type' === $column_key ) { $new_columns['order_item_name'] = __( 'Item Name', 'my-textdomain' ); } } return $new_columns; } // 2. 给导出的CSV新增列头 add_filter( 'woocommerce_analytics_orders_export_columns', 'add_item_name_column_to_analytics_export' ); function add_item_name_column_to_analytics_export( $columns ) { $new_columns = []; foreach ( $columns as $column_key => $column_label ) { $new_columns[ $column_key ] = $column_label; if ( 'customer_type' === $column_key ) { $new_columns['order_item_name'] = __( 'Item Name', 'my-textdomain' ); } } return $new_columns; } // 3. 给页面表格的列填充订单项名称数据 add_filter( 'woocommerce_analytics_orders_select_query', 'fill_item_name_data_for_analytics_table', 10, 2 ); function fill_item_name_data_for_analytics_table( $results, $query ) { foreach ( $results as &$order_data ) { $order = wc_get_order( $order_data['order_id'] ); if ( ! $order ) { $order_data['order_item_name'] = ''; continue; } $item_names = []; foreach ( $order->get_items() as $item ) { $item_names[] = $item->get_name(); } // 页面展示用换行分隔,也可以换成逗号 $order_data['order_item_name'] = implode( '<br>', $item_names ); } return $results; } // 4. 给导出CSV的列填充订单项名称数据 add_filter( 'woocommerce_analytics_orders_prepare_export_item', 'fill_item_name_data_for_analytics_export', 10, 2 ); function fill_item_name_data_for_analytics_export( $export_item, $order_data ) { $order = wc_get_order( $order_data['order_id'] ); if ( ! $order ) { $export_item['order_item_name'] = ''; return $export_item; } $item_names = []; foreach ( $order->get_items() as $item ) { $item_names[] = $item->get_name(); } // CSV导出用逗号分隔,避免格式混乱 $export_item['order_item_name'] = implode( ', ', $item_names ); return $export_item; }
生效操作
代码部署完成后,需要进入WooCommerce后台->Analytics->设置,点击清除分析缓存,刷新报表页面即可看到新增列,导出CSV也会同步包含该列数据。
内容的提问来源于stack exchange,提问作者Tim Darius
相关产品推荐
相关产品推荐

