如何去除WooCommerce后台订单列表自定义列的重复值
WooCommerce订单自定义列产品名重复修复方案
问题根因
- 你调用
$order->get_items()返回的是WC_Order_Item_Product对象数组,直接对该数组使用array_unique()无法按产品名去重,函数无法直接识别对象的内部属性 - 重复值来自同一订单内的多份同产品订单项、或者同名称的不同变体产品订单项
修复代码
先遍历订单项把所有产品名存入字符串数组,再对字符串数组做去重,最后拼接输出即可,修改后的代码如下:
add_action( 'manage_shop_order_posts_custom_column', 'inforder_add_new_order_admin_list_column_content' ); function inforder_add_new_order_admin_list_column_content( $column ) { global $post; if ( 'product_order' === $column ) { $order = wc_get_order( $post->ID ); $items = $order->get_items(); $product_names = []; // 收集所有产品名到字符串数组 foreach($items as $item) { $product_names[] = $item->get_name(); } // 对字符串数组去重后拼接输出 echo implode(', ', array_unique($product_names)); } }
如果你需要按产品ID去重(避免不同产品重名导致被误去重),可以改成用产品ID作为数组键实现去重,示例逻辑如下:
foreach($items as $item) { $product_id = $item->get_product_id(); // 同ID的产品只会保留第一个的名称 $product_names[$product_id] = $item->get_name(); } echo implode(', ', $product_names);
内容的提问来源于stack exchange,提问作者Patricio
相关产品推荐
相关产品推荐

