纯代码实现WordPress批量创建测试用户

WordPress技巧分享:作为一名WordPress开发者或网站管理员,你是否曾为创建大量测试用户而感到繁琐?在开发会员网站、测试权限功能或进行压力测试时,手动一个个添加用户、设置密码和邮箱,无疑是浪费时间且容易出错的重复性劳动。本文地质网老白给出一段简单的代码,彻底告别这个烦恼。让你在后台一键批量生成测试用户,极大提升工作效率。

纯代码实现WordPress批量创建测试用户

核心功能说明

这段代码的核心目标是为WordPress后台增加一个“快速添加测试用户”的功能入口。它具备以下特点:

  • 无缝集成:在WordPress仪表盘的“用户”菜单下,自动生成一个名为“快速添加测试用户”的子页面,操作入口清晰直观。
  • 极简操作:你只需要在一个文本框中,输入纯数字的用户名列表(每行一个)

修改教程

版本一(不带用户名)

functions.php(主题函数文件),添加代码

/**
* 快速添加测试用户-https://www.dzw6.com/.35123html
*/
function wpturbo_add_test_user_submenu_page() {
add_submenu_page(
'users.php', // 父级菜单的 slug (用户)
'快速添加测试用户', // 页面标题
'快速添加测试用户', // 菜单标题
'create_users', // 权限要求 (需要有创建用户的权限)
'wpturbo-add-test-users',
'wpturbo_render_test_user_page' // 用于渲染页面内容的回调函数
);
}
add_action('admin_menu', 'wpturbo_add_test_user_submenu_page');

/**
* 渲染“快速添加测试用户”页面内容的回调函数
*/
function wpturbo_render_test_user_page() {
?>
<div class="wrap">
<h1>快速添加测试用户</h1>
<p>在下方文本框中输入纯数字的用户名,每行一个。系统将自动为每个用户设置密码为用户名本身,邮箱为 <code>{用户名}@qq.com</code>。</p>

<?php
// 检查表单是否已提交,并验证 nonce 以确保安全性
if (isset($_POST['wpturbo_submit']) && check_admin_referer('wpturbo_create_test_users_nonce')) {

$usernames_input = $_POST['usernames'];
// 使用正则表达式分割字符串,兼容所有类型的换行符
$usernames_raw = preg_split('/\r\n|\r|\n/', $usernames_input);

// 移除每行首尾的空白字符(如空格、制表符)
$usernames_trimmed = array_map('trim', $usernames_raw);

$created_users = [];
$error_messages = [];

foreach ($usernames_trimmed as $username) {
// 【核心修复】使用正则表达式移除所有类型的空白字符(包括不间断空格等隐藏字符)
// \s+ 匹配一个或多个空白字符,u 修饰符支持UTF-8/Unicode
$username = preg_replace('/\s+/', '', $username);

// 如果清理后用户名为空(例如,原行只有空格),则跳过
if (empty($username)) {
continue;
}

// 1. 验证用户名是否为纯数字
if (!is_numeric($username)) {
$error_messages[] = "用户名 '<strong>{$username}</strong>' 无效:必须是纯数字。";
continue;
}

// 2. 检查用户名是否已存在
if (username_exists($username)) {
$error_messages[] = "用户名 '<strong>{$username}</strong>' 已存在。";
continue;
}

$email = $username . '@qq.com';
$password = $username;

// 3. 检查邮箱是否已被使用
if (email_exists($email)) {
$error_messages[] = "邮箱 '<strong>{$email}</strong>' 已被使用。";
continue;
}

// 4. 创建用户
$user_id = wp_create_user($username, $password, $email);

// 5. 检查创建结果
if (is_wp_error($user_id)) {
$error_messages[] = "创建用户 '<strong>{$username}</strong>' 时发生未知错误:" . $user_id->get_error_message();
} else {
$created_users[] = $username;
}
}

// 显示成功创建的用户列表
if (!empty($created_users)) {
echo '<div class="notice notice-success is-dismissible"><h3>成功创建以下用户:</h3><ul>';
foreach ($created_users as $user) {
echo '<li>用户名: <strong>' . esc_html($user) . '</strong>, 密码: <strong>' . esc_html($user) . '</strong>, 邮箱: <strong>' . esc_html($user) . '@qq.com</strong></li>';
}
echo '</ul></div>';
}

// 显示处理过程中遇到的错误
if (!empty($error_messages)) {
echo '<div class="notice notice-error"><h3>处理过程中发生以下错误:</h3><ul>';
foreach ($error_messages as $msg) {
// 允许在错误信息中使用 <strong> 等基本标签
echo '<li>' . wp_kses($msg, ['strong' => []]) . '</li>';
}
echo '</ul></div>';
}
}
?>

<form method="post" action="">
<table class="form-table" role="presentation">
<tbody>
<tr>
<th scope="row">
<label for="usernames">用户名列表</label>
</th>
<td>
<textarea name="usernames" id="usernames" class="large-text" rows="15" placeholder="1&#10;2&#10;3&#10;1001&#10;1002"></textarea>
<p class="description">每行输入一个纯数字的用户名。例如,输入 "1" 将创建用户名为 "1",密码为 "1",邮箱为 "1@qq.com" 的用户。</p>
</td>
</tr>
</tbody>
</table>
<?php
// 生成一个安全的 nonce 字段,用于防止 CSRF 攻击
wp_nonce_field('wpturbo_create_test_users_nonce');
// 显示提交按钮
submit_button('批量创建用户', 'primary', 'wpturbo_submit');
?>
</form>
</div>
<?php
}

版本二(带用户名)

functions.php

(主题函数文件)添加代码

/**
* 快速添加测试用户-https://www.dzw6.com/.35123html
* 修改版:支持 user_login 和 display_name 两行输入
*/
function wpturbo_add_test_user_submenu_page() {
add_submenu_page(
'users.php', // 父级菜单的 slug (用户)
'快速添加测试用户', // 页面标题
'快速添加测试用户', // 菜单标题
'create_users', // 权限要求 (需要有创建用户的权限)
'wpturbo-add-test-users',
'wpturbo_render_test_user_page' // 用于渲染页面内容的回调函数
);
}
add_action('admin_menu', 'wpturbo_add_test_user_submenu_page');

function wpturbo_render_test_user_page() {
?>
<div class="wrap">
<h1>快速添加测试用户</h1>
<p>在下方文本框中输入用户信息,格式为:第一行为纯数字用户名,第二行为显示名,每组之间用一个或多个空行隔开。</p>
<?php
if (isset($_POST['wpturbo_submit']) && check_admin_referer('wpturbo_create_test_users_nonce')) {
$user_input = $_POST['usernames'];

// *** 核心改动 1: 解析新的输入格式 ***
// 1. 先按两个或更多换行符(即空行)分割,得到用户组
$user_groups = preg_split('/rns*rn|rs*r|ns*n/', $user_input);

$created_users = [];
$error_messages = [];

foreach ($user_groups as $group) {
// 2. 对每个组,再按单行换行符分割
$parts = preg_split('/rn|r|n/', $group);
$parts = array_map('trim', $parts); // 清理每行前后的空格
$parts = array_filter($parts); // 移除组内可能存在的空元素

// 3. 验证每组是否包含且仅包含两行数据
if (count($parts) !== 2) {
$error_messages[] = "输入格式错误:每组数据必须包含两行(用户名和显示名),并用空行隔开。以下输入无法解析:<pre>" . esc_html($group) . "</pre>";
continue;
}

$user_login = $parts[0];
$display_name = $parts[1];

// 4. 验证数据有效性
if (empty($user_login) || !is_numeric($user_login)) {
$error_messages[] = "用户名 '<strong>{$user_login}</strong>' 无效:必须是纯数字且不能为空。";
continue;
}

if (empty($display_name)) {
$error_messages[] = "对于用户名 '<strong>{$user_login}</strong>',其显示名不能为空。";
continue;
}

if (username_exists($user_login)) {
$error_messages[] = "用户名 '<strong>{$user_login}</strong>' 已存在。";
continue;
}

$email = $user_login . '@qq.com';
$password = $user_login;

if (email_exists($email)) {
$error_messages[] = "邮箱 '<strong>{$email}</strong>' 已被使用。";
continue;
}

// 5. 创建用户
$user_id = wp_create_user($user_login, $password, $email);

if (is_wp_error($user_id)) {
$error_messages[] = "创建用户 '<strong>{$user_login}</strong>' 时发生未知错误:" . $user_id->get_error_message();
} else {
// *** 核心改动 2: 创建用户后,更新其 display_name ***
wp_update_user([
'ID' => $user_id,
'display_name' => $display_name,
]);

// 将成功创建的用户信息存入数组,用于后续显示
$created_users[] = [
'login' => $user_login,
'display_name' => $display_name,
'password' => $password,
'email' => $email
];
}
}

// 显示成功创建的用户列表
if (!empty($created_users)) {
echo '<div class="notice notice-success is-dismissible"><h3>成功创建以下用户:</h3><ul>';
foreach ($created_users as $user) {
echo '<li>用户名: <strong>' . esc_html($user['login']) . '</strong>, 显示名: <strong>' . esc_html($user['display_name']) . '</strong>, 密码: <strong>' . esc_html($user['password']) . '</strong>, 邮箱: <strong>' . esc_html($user['email']) . '</strong></li>';
}
echo '</ul></div>';
}

// 显示错误信息
if (!empty($error_messages)) {
echo '<div class="notice notice-error"><h3>处理过程中发生以下错误:</h3><ul>';
foreach ($error_messages as $msg) {
echo '<li>' . $msg . '</li>';
}
echo '</ul></div>';
}
}
?>
<form method="post" action="">
<table class="form-table" role="presentation">
<tbody>
<tr>
<th scope="row">
<label for="usernames">用户信息列表</label>
</th>
<td>
<textarea name="usernames" id="usernames" class="large-text" rows="15" placeholder="145&#10;清风明月&#10;&#10;146&#10;朗朗乾坤"></textarea>
<!-- *** 核心改动 3: 更新了提示文字 *** -->
<p class="description">每两行为一组,第一行输入纯数字的用户名,第二行输入显示名。组与组之间用空行隔开。例如:</p>
<p class="description"><code>145</code><br><code>清风明月</code><br><br><code>146</code><br><code>朗朗乾坤</code></p>
</td>
</tr>
</tbody>
</table>
<?php
wp_nonce_field('wpturbo_create_test_users_nonce');
submit_button('批量创建用户', 'primary', 'wpturbo_submit');
?>
</form>
</div>
<?php
}

WordPress仪表盘, “用户” 菜单,就能看到“快速添加测试用户”

点击文末标签阅读更多WordPress优化教程。

给TA打赏
共{{data.count}}人
人已打赏
网站建设

B2主题解除特定角色圈子话题阅读限制

2025-11-29 13:56:22

网站建设

WordPress后台批量添加链接/友链/导航链接/外链

2025-12-4 20:55:23

🚨 小黑屋
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
搜索