子比主题 – 单IP限制多用户注册_代码版
很多站长都在纠结的是用户限制一天下载次数,但是有的用户就是去连续注册,一天注册个十几个去下载资源,所以今天腾飞博客给大家分享一个代码版本,喜欢的自行部署吧!代码部署
这个代码是实现的单日IP一次注册,有技术的可以去写一个插件或者子主题去写一个限制一天注册多少!
user-sign-limit.php文件
创建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']));
} 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');func代码
定位:/wp-content/themes/zibll/func.php文件,没有创建记得自己创建一下,记得加上php头,要不然会报错!
// 引入IP限制注册功能
require_once get_theme_file_path('/inc/functions/user/user-sign-limit.php');
页:
[1]