从 WooCommerce 管理员订单列表的自定义列中删除重复值

Remove duplicate values from custom column on WooCommerce admin orders list

我有以下代码在 WooCommerce 管理员订单列表中添加自定义列

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();
        $count = count($items);
        $i = 1;
        foreach($items as $item) {
            if($i==$count) 
                echo $item->get_name();
            else
                echo $item->get_name() .', ';
            $i++;
        }
    }
    
    
}

但这显示了重复值。我试图避免使用 array_unique(),可惜没有得到想要的结果。

有什么避免这种情况的建议吗?

您的代码有一些错误

  • 缺少manage_edit-shop_order_columns,用于添加列
  • manage_shop_order_posts_custom_column 没有 1 个参数,而是 2 个参数,第 2 个参数包含 $post_id,因此不需要使用 global $post
  • 您可以使用 in_array(),它检查一个值是否存在于数组中。如果不是这种情况,我们将把这个值添加到数组中,这样我们就避免了重复值

所以你得到:

// Add header
function filter_manage_edit_shop_order_columns( $columns ) {    
    $columns['product_order'] = __( 'Product', 'woocommerce' );

    return $columns;
}
add_filter( 'manage_edit-shop_order_columns', 'filter_manage_edit_shop_order_columns', 10, 1 );

// Display (populate the column)
function action_manage_shop_order_posts_custom_column( $column, $post_id ) {    
    // Compare
    if ( $column == 'product_order' ) {
        // Get order
        $order = wc_get_order( $post_id );
        
        // Initialize
        $names = array();

        // Is a WC_Order
        if ( is_a( $order, 'WC_Order' ) ) {
            // Get items
            $items = $order->get_items();
            
            // Loop through
            foreach ( $items as $key => $item ) {
                // Get name
                $name = $item->get_name();
                
                // NOT in array
                if ( ! in_array( $name, $names, true ) ) {
                    // Push one or more elements onto the end of array
                    array_push( $names, $name );
                }
            }
            
            // NOT empty, print result
            if ( ! empty( $names ) ) {
                // Use implode() function to join comma in the array
                $list = implode( ', ', $names );
                
                // Output
                echo $list;
            }
        }
    }
}
add_action( 'manage_shop_order_posts_custom_column' , 'action_manage_shop_order_posts_custom_column', 10, 2 );