飞流 发表于 2025-10-10 18:40:12

子比主题 – 单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]
查看完整版本: 子比主题 – 单IP限制多用户注册_代码版