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

如何在WooCommerce后台订单列表中显示完成及标记完成订单的用户名

实现WooCommerce后台订单列表的两个用户显示功能

嘿,我刚好处理过类似的需求,下面是完整的代码实现方案,你可以把这些代码添加到主题的functions.php文件中,或者创建一个自定义插件来使用(更推荐后者,避免主题更新导致代码丢失):


1. 记录并显示完成订单的用户名

首先我们需要在订单状态变更为“已完成”时,自动记录操作的用户ID,然后在订单列表中新增一列来展示这个用户的名称:

// 1. 给订单列表添加"完成用户"新列
add_filter('manage_shop_order_posts_columns', 'add_completed_by_column');
function add_completed_by_column($columns) {
    // 把新列插入到"订单状态"列的后面
    $new_columns = [];
    foreach ($columns as $key => $value) {
        $new_columns[$key] = $value;
        if ($key === 'order_status') {
            $new_columns['completed_by'] = '完成用户';
        }
    }
    return $new_columns;
}

// 2. 填充"完成用户"列的内容
add_action('manage_shop_order_posts_custom_column', 'display_completed_by_user', 10, 2);
function display_completed_by_user($column, $post_id) {
    if ($column === 'completed_by') {
        $order = wc_get_order($post_id);
        if (!$order) return;

        // 获取已记录的完成用户ID
        $completed_by_user_id = $order->get_meta('_completed_by_user_id');
        
        if ($completed_by_user_id) {
            $user = get_user_by('id', $completed_by_user_id);
            if ($user) {
                echo esc_html($user->display_name);
            } else {
                echo '用户已删除';
            }
        } else {
            echo '无记录';
        }
    }
}

// 3. 订单状态改为"已完成"时,自动记录操作的用户
add_action('woocommerce_order_status_changed', 'record_completed_by_user', 10, 4);
function record_completed_by_user($order_id, $old_status, $new_status, $order) {
    // 仅在后台操作、且状态变为completed时记录
    if ($new_status === 'completed' && is_admin()) {
        $current_user_id = get_current_user_id();
        if ($current_user_id) {
            $order->update_meta_data('_completed_by_user_id', $current_user_id);
            $order->save();
        }
    }
}

2. 美化“完成用户”列的显示样式(匹配截图标签风格)

如果需要像截图那样把用户名显示成美观的标签样式,添加以下代码来实现:

// 给后台添加自定义CSS样式
add_action('admin_head', 'completed_by_column_styling');
function completed_by_column_styling() {
    echo '<style>
        .wp-list-table .column-completed_by {
            width: 120px;
        }
        .completed-by-label {
            display: inline-block;
            padding: 2px 8px;
            border-radius: 4px;
            background: #e7f5ff;
            color: #135e96;
            font-size: 12px;
            font-weight: 500;
        }
        .completed-by-label.deleted {
            background:#fef0f0;
            color:#dc3232;
        }
        .completed-by-label.no-record {
            background:#f0f0f1;
            color:#646970;
        }
    </style>';
}

然后修改之前的display_completed_by_user函数,把输出内容包裹在标签样式里:

// 修改后的填充列内容函数
add_action('manage_shop_order_posts_custom_column', 'display_completed_by_user', 10, 2);
function display_completed_by_user($column, $post_id) {
    if ($column === 'completed_by') {
        $order = wc_get_order($post_id);
        if (!$order) return;

        $completed_by_user_id = $order->get_meta('_completed_by_user_id');
        
        if ($completed_by_user_id) {
            $user = get_user_by('id', $completed_by_user_id);
            if ($user) {
                echo '<span class="completed-by-label">' . esc_html($user->display_name) . '</span>';
            } else {
                echo '<span class="completed-by-label deleted">用户已删除</span>';
            }
        } else {
            echo '<span class="completed-by-label no-record">无记录</span>';
        }
    }
}

小提示

  • 这段代码仅对之后标记为已完成的订单生效,历史订单如果需要补全记录,可以通过数据库批量添加_completed_by_user_id元数据,或者手动编辑订单补充;
  • 只有拥有订单编辑权限的后台用户才能看到这个新增列。

内容的提问来源于stack exchange,提问作者X - Developer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:45:24