首先,我们创建php文件user-sign-limit.php
创建 inc/functions/user/user-sign-limit.php
<?php
/*
* @Author: Qinver
* @Url: zibll.com
* @Date: 2024-01-01
* @Description: 用户注册IP限制功能
*/
// 防止直接访问
defined('ABSPATH') || exit;
/**
* 检查IP是否已经注册过用户
*/
function zib_check_ip_register_limit($user_ip) {
global $wpdb;
// 获取当前IP已注册的用户数量
$registered_count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->usermeta} WHERE meta_key = 'register_ip' AND meta_value = %s",
$user_ip
));
// 如果已经有注册记录,则禁止注册
if ($registered_count > 0) {
return new WP_Error('ip_limit', '该IP已注册过账号,不能重复注册');
}
return true;
}
/**
* 在用户注册时记录IP
*/
function zib_save_register_ip($user_id) {
if (!$user_id) return;
// 获取用户注册IP
$user_ip = zib_get_client_ip();
// 保存用户注册IP
update_user_meta($user_id, 'register_ip', $user_ip);
}
/**
* 获取客户端真实IP
*/
function zib_get_client_ip() {
if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) { //兼容CloudFlare
$ip = $_SERVER['HTTP_CF_CONNECTING_IP'];
} elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { //兼容CDN和代理
$ip = trim(explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])[0]);
} elseif (isset($_SERVER['REMOTE_ADDR'])) {
$ip = $_SERVER['REMOTE_ADDR'];
} else {
$ip = '0.0.0.0';
}
return $ip;
}
// 在WordPress注册钩子中添加IP检查
add_filter('registration_errors', function($errors, $sanitized_user_login, $user_email) {
// 获取用户IP
$user_ip = zib_get_client_ip();
// 检查IP限制
$ip_check = zib_check_ip_register_limit($user_ip);
if (is_wp_error($ip_check)) {
$errors->add($ip_check->get_error_code(), $ip_check->get_error_message());
}
return $errors;
}, 10, 3);
// 在用户注册成功后保存IP
add_action('user_register', 'zib_save_register_ip');
然后去fun下加入以下代码
// 引入IP限制注册功能
require_once get_theme_file_path('/inc/functions/user/user-sign-limit.php');
© 版权声明
免责声明:本站是非经营性网站,网站资源部分收集整理于互联网,其著作权归原作者所有,如果有侵犯您权利的资源,请来信告知:foxccs@163.com,我们将及时撤销相应资源。
请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
THE END


















【bug修复】 - 狐狸资源网">
















暂无评论内容