如何在WooCommerce后台订单列表自定义列中显示用户名?
自定义WooCommerce订单概览列显示WordPress用户信息
我来帮你搞定这个需求——在WooCommerce的订单列表里添加一个自定义列,用来显示对应的WordPress用户信息。你给出的代码已经有了添加列的雏形,我来补全完整的实现逻辑,还会加上一些实用的细节:
1. 先添加自定义列到订单列表
首先我们要通过过滤器把新列插入到订单状态列之后,补全你的代码:
// ADDING A NEW COLUMN add_filter( 'manage_edit-shop_order_columns', 'k2i_extra_column_eldest_players', 20 ); function k2i_extra_column_eldest_players($columns) { $reordered_columns = array(); // 遍历原有列,把新列插入到指定位置 foreach( $columns as $key => $column){ $reordered_columns[$key] = $column; // 在订单状态列之后插入新列 if( $key == 'order_status' ){ $reordered_columns['customer_user_info'] = __('WordPress用户', 'text-domain'); } } return $reordered_columns; }
注意:把text-domain替换成你主题的文本域,方便后续做翻译适配。
2. 填充自定义列的用户信息
光有列还不够,我们需要用动作钩子来填充列的内容,获取订单对应的用户数据:
// FILLING THE NEW COLUMN add_action( 'manage_shop_order_posts_custom_column' , 'k2i_fill_extra_column_eldest_players', 10, 2 ); function k2i_fill_extra_column_eldest_players( $column, $post_id ) { global $the_order; switch ( $column ) { case 'customer_user_info' : // 确保订单对象有效,全局对象不存在就重新获取 if ( ! is_a( $the_order, 'WC_Order' ) ) { $the_order = wc_get_order( $post_id ); } // 获取订单关联的用户ID $user_id = $the_order->get_user_id(); if ( $user_id ) { // 通过用户ID获取用户对象 $user = get_user_by( 'id', $user_id ); if ( $user ) { // 显示用户名+邮箱,你可以按需调整显示内容 echo '<strong>' . esc_html( $user->user_login ) . '</strong><br>'; echo '<span style="color:#666;">' . esc_html( $user->user_email ) . '</span>'; // 要是需要显示用户角色、注册日期,解开下面的注释就行 // echo '<br>' . __('角色:', 'text-domain') . ' ' . esc_html( implode(', ', $user->roles) ); } } else { // 访客订单没有关联用户,显示提示文字 echo __('访客订单', 'text-domain'); } break; } }
这段代码会判断当前列是我们的自定义列后,获取订单对应的用户信息,友好展示出来;如果是没有关联用户的访客订单,也会给出明确提示。
3. 可选:让自定义列支持排序
如果你希望点击列标题就能按用户排序订单,可以加上这段代码:
// 让自定义列支持排序 add_filter( 'manage_edit-shop_order_sortable_columns', 'k2i_sortable_eldest_players_column' ); function k2i_sortable_eldest_players_column( $columns ) { $columns['customer_user_info'] = 'customer_user'; return $columns; } // 处理排序逻辑 add_action( 'pre_get_posts', 'k2i_eldest_players_column_sort' ); function k2i_eldest_players_column_sort( $query ) { if ( ! is_admin() ) return; $orderby = $query->get( 'orderby' ); if ( 'customer_user' == $orderby ) { $query->set( 'meta_key', '_customer_user' ); $query->set( 'orderby', 'meta_value_num' ); } }
这样点击“WordPress用户”列的标题,就能按用户ID升序/降序排列订单了。
最后提醒
把这些代码添加到你的子主题functions.php文件里,或者用专门的代码管理插件(比如Code Snippets)来添加,避免主题更新后代码丢失哦~
内容的提问来源于stack exchange,提问作者Arne De Belser
相关产品推荐
相关产品推荐

