You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:06:02