以下是一个专为WordPress新手设计的完整自定义注册表单插件代码,包含详细注释和扩展功能,请按照步骤操作:
一、创建插件文件
- 在
/wp-content/plugins/
目录下新建文件夹custom-registration
- 在文件夹内创建
custom-registration.php
文件,粘贴以下代码:
<?php
/*
Plugin Name: 自定义注册表单
Plugin URI: https://yourdomain.com/
Description: 带验证码和手机号验证的自定义注册表单
Version: 1.2
Author: 酒醒
Text Domain: custom-registration
*/
// 安全检测
if (!defined('ABSPATH')) {
exit;
}
/**
* 核心类 - 注册表单功能
*/
class Custom_Registration_Form {
// 初始化插件
public function __construct() {
// 注册短代码
add_shortcode('custom_reg_form', array($this, 'registration_form'));
// 处理表单提交
add_action('template_redirect', array($this, 'process_registration'));
// 加载样式
add_action('wp_enqueue_scripts', array($this, 'load_assets'));
}
/**
* 加载CSS和JS
*/
public function load_assets() {
wp_enqueue_style(
'cr-style',
plugins_url('assets/style.css', __FILE__),
array(),
'1.2'
);
wp_enqueue_script(
'cr-script',
plugins_url('assets/script.js', __FILE__),
array('jquery'),
'1.2',
true
);
}
/**
* 注册表单HTML
*/
public function registration_form() {
// 已登录用户不显示
if (is_user_logged_in()) {
return '<div class="cr-alert">您已登录!</div>';
}
ob_start(); // 开始输出缓冲
?>
<div class="cr-wrapper">
<form id="cr-form" method="post">
<?php wp_nonce_field('cr_register_action', 'cr_nonce'); ?>
<!-- 基础字段 -->
<div class="cr-field">
<label>用户名*</label>
<input type="text" name="cr_username" required
placeholder="4-20位字母数字">
</div>
<div class="cr-field">
<label>电子邮箱*</label>
<input type="email" name="cr_email" required
placeholder="example@domain.com">
</div>
<div class="cr-field">
<label>手机号码*</label>
<input type="tel" name="cr_phone" required
pattern="^1[3-9]\d{9}$"
placeholder="11位中国大陆手机号">
</div>
<div class="cr-field">
<label>密码*</label>
<input type="password" name="cr_password"
id="cr_password" required
placeholder="至少8位字符">
<div class="pw-strength"></div>
</div>
<!-- 验证码 -->
<div class="cr-field">
<label>验证码*</label>
<div class="captcha-group">
<input type="text" name="cr_captcha" required
placeholder="输入右侧验证码">
<img src="<?php echo $this->generate_captcha(); ?>"
class="captcha-img"
onclick="this.src='<?php echo $this->generate_captcha(); ?>&t='+Date.now()">
</div>
</div>
<button type="submit" name="cr_submit" class="cr-submit">
立即注册
</button>
</form>
<!-- 消息提示区域 -->
<div class="cr-messages"><?php $this->show_messages(); ?></div>
</div>
<?php
return ob_get_clean();
}
/**
* 处理注册逻辑
*/
public function process_registration() {
if (!isset($_POST['cr_submit'])) return;
// 验证nonce
if (!wp_verify_nonce($_POST['cr_nonce'], 'cr_register_action')) {
$this->add_error('请求验证失败');
return;
}
// 接收并清理数据
$data = array(
'username' => sanitize_user($_POST['cr_username']),
'email' => sanitize_email($_POST['cr_email']),
'phone' => preg_replace('/[^\d]/', '', $_POST['cr_phone']),
'password' => $_POST['cr_password'],
'captcha' => strtolower($_POST['cr_captcha'])
);
// 字段验证
$errors = $this->validate_fields($data);
if (!empty($errors)) {
foreach ($errors as $error) $this->add_error($error);
return;
}
// 创建用户
$user_id = wp_create_user(
$data['username'],
$data['password'],
$data['email']
);
if (is_wp_error($user_id)) {
$this->add_error($user_id->get_error_message());
return;
}
// 保存手机号
update_user_meta($user_id, 'phone_number', $data['phone']);
// 发送通知邮件
$this->send_welcome_email($user_id);
// 注册成功处理
$this->add_success('注册成功!请查收激活邮件');
wp_redirect(home_url('/login')); // 跳转到登录页
exit;
}
/**
* 字段验证逻辑
*/
private function validate_fields($data) {
$errors = array();
// 用户名验证
if (empty($data['username']) || !validate_username($data['username'])) {
$errors[] = '用户名包含非法字符';
} elseif (username_exists($data['username'])) {
$errors[] = '用户名已被使用';
}
// 邮箱验证
if (!is_email($data['email'])) {
$errors[] = '邮箱格式不正确';
} elseif (email_exists($data['email'])) {
$errors[] = '邮箱已被注册';
}
// 手机号验证
if (!preg_match('/^1[3-9]\d{9}$/', $data['phone'])) {
$errors[] = '手机号格式不正确';
}
// 密码强度
if (strlen($data['password']) < 8) {
$errors[] = '密码至少需要8位';
}
// 验证码校验(示例用简单验证码)
if ($data['captcha'] !== $_SESSION['cr_captcha']) {
$errors[] = '验证码错误';
}
return $errors;
}
/**
* 生成验证码图片(简易版)
*/
private function generate_captcha() {
$num1 = rand(1, 9);
$num2 = rand(1, 9);
$_SESSION['cr_captcha'] = $num1 + $num2;
return plugins_url('captcha-img.php?n1='.$num1.'&n2='.$num2, __FILE__);
}
/**
* 发送欢迎邮件
*/
private function send_welcome_email($user_id) {
$user = get_userdata($user_id);
$to = $user->user_email;
$subject = '欢迎加入' . get_bloginfo('name');
$message = sprintf(
"您好 %s,\n\n感谢注册!您的账号已创建成功。\n\n登录地址:%s",
$user->user_login,
wp_login_url()
);
wp_mail($to, $subject, $message);
}
/**
* 消息提示系统
*/
private function add_error($message) {
add_action('cr_messages', function() use ($message) {
echo '<div class="cr-error">' . esc_html($message) . '</div>';
});
}
private function add_success($message) {
add_action('cr_messages', function() use ($message) {
echo '<div class="cr-success">' . esc_html($message) . '</div>';
});
}
public function show_messages() {
do_action('cr_messages');
}
}
// 初始化插件
new Custom_Registration_Form();
/**
* 安装时创建必要的数据表(可选)
*/
register_activation_hook(__FILE__, 'cr_create_table');
function cr_create_table() {
global $wpdb;
$table_name = $wpdb->prefix . 'cr_reg_logs';
$sql = "CREATE TABLE $table_name (
id mediumint(9) NOT NULL AUTO_INCREMENT,
user_login varchar(60) NOT NULL,
reg_date datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
ip_address varchar(45) NOT NULL,
PRIMARY KEY (id)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
}
二、创建配套文件
- 在插件目录内新建
assets
文件夹 - 创建
style.css
(样式文件):
/* 基础样式 */
.cr-wrapper {
max-width: 500px;
margin: 2rem auto;
padding: 20px;
background: #f8f9fa;
border-radius: 8px;
box-shadow: 0 2px 15px rgba(0,0,0,0.1);
}
#cr-form .cr-field {
margin-bottom: 1.5rem;
}
#cr-form label {
display: block;
margin-bottom: 0.5rem;
font-weight: 600;
}
#cr-form input:not([type=submit]) {
width: 100%;
padding: 10px;
border: 1px solid #ddd;
border-radius: 4px;
}
.cr-submit {
background: #007bff;
color: white;
padding: 12px 25px;
border: none;
border-radius: 4px;
cursor: pointer;
width: 100%;
}
/* 消息提示 */
.cr-error {
color: #dc3545;
padding: 10px;
margin: 1rem 0;
border: 1px solid #f8d7da;
background: #f8d7da;
border-radius: 4px;
}
.cr-success {
color: #155724;
padding: 10px;
margin: 1rem 0;
border: 1px solid #d4edda;
background: #d4edda;
border-radius: 4px;
}
/* 验证码样式 */
.captcha-group {
display: flex;
gap: 10px;
}
.captcha-img {
height: 38px;
border: 1px solid #ddd;
border-radius: 4px;
cursor: pointer;
}
创建 script.js
(前端验证):
jQuery(document).ready(function($) {
// 密码强度实时检测
$('#cr_password').on('input', function() {
let strength = 0;
const val = $(this).val();
if (val.match(/[A-Z]/)) strength++;
if (val.match(/[0-9]/)) strength++;
if (val.length >= 10) strength++;
$('.pw-strength').css('width', (strength * 33) + '%')
.removeClass('weak medium strong')
.addClass(['weak', 'medium', 'strong'][strength-1]);
});
});
三、使用说明
- 安装插件:
- 将整个
custom-registration
文件夹压缩为ZIP - 在WordPress后台 → 插件 → 安装插件 → 上传安装
- 将整个
- 使用短代码:
- 在任意页面/文章中添加短代码
[custom_reg_form]
- 示例页面:
/register
- 在任意页面/文章中添加短代码
- 功能说明:
- 前端注册表单(用户名、邮箱、手机、密码、验证码)
- 实时密码强度检测
- 自动发送欢迎邮件
- 手机号格式验证
- 防重复注册检测
- 基础防机器人验证
- 响应式设计
四、扩展建议
如需添加更多功能,可以在以下位置修改:
- 添加新字段:在
registration_form()
方法中添加新的输入字段 - 增强验证:修改
validate_fields()
中的验证逻辑 - 对接短信API:在用户注册成功后调用短信接口
- 添加第三方登录:集成微信/QQ等社交登录功能
此代码已包含基础安全措施(Nonce验证、数据清理),建议在生产环境中:
- 启用HTTPS
- 添加更复杂的验证码(如Google reCAPTCHA)
- 对接专业的短信验证服务
- 定期备份数据库
希望这个完整解决方案能帮助您快速上手WordPress插件开发!
提示:仅供参考