寻求适配的WordPress IP登录限制插件及PHP技术支持
自定义WordPress IP绑定登录解决方案
既然现成插件都满足不了需求,下面给你一套完整的自定义PHP代码实现功能,直接做成插件就能用:
<?php /** * Plugin Name: IP Restricted Login * Description: Restricts users to log in only from their original registration IP * Version: 1.0 * Author: Custom Dev */ // 记录新用户注册时的IP地址 add_action('user_register', 'save_user_registration_ip'); function save_user_registration_ip($user_id) { // 获取真实IP(兼容反向代理场景) $ip_address = $_SERVER['REMOTE_ADDR']; if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip_address = $_SERVER['HTTP_X_FORWARDED_FOR']; } elseif (!empty($_SERVER['HTTP_CLIENT_IP'])) { $ip_address = $_SERVER['HTTP_CLIENT_IP']; } // 保存IP到用户元数据 update_user_meta($user_id, 'registration_ip', $ip_address); } // 登录时验证IP,不匹配则拦截 add_filter('authenticate', 'restrict_login_by_ip', 10, 3); function restrict_login_by_ip($user, $username, $password) { // 用户名/密码错误时直接返回,不触发IP验证 if (!is_a($user, 'WP_User')) { return $user; } // 获取用户注册时的IP $registration_ip = get_user_meta($user->ID, 'registration_ip', true); if (empty($registration_ip)) { // 插件激活前注册的老用户默认放行,可按需修改为拦截逻辑 return $user; } // 获取当前登录IP $current_ip = $_SERVER['REMOTE_ADDR']; if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $current_ip = $_SERVER['HTTP_X_FORWARDED_FOR']; } elseif (!empty($_SERVER['HTTP_CLIENT_IP'])) { $current_ip = $_SERVER['HTTP_CLIENT_IP']; } // IP不匹配则拦截登录并提示 if ($current_ip !== $registration_ip) { remove_action('authenticate', 'wp_authenticate_username_password', 20); return new WP_Error('invalid_ip', __('please try to log in with ur original ip')); } return $user; }
功能说明
- 新用户注册时,IP会自动存入用户元数据(键为
registration_ip) - 登录时自动对比当前IP与注册IP,不匹配则拦截并显示指定提示
- 兼容反向代理场景下的真实IP获取
- 老用户(插件激活前注册)默认允许登录,可自行修改代码调整这部分逻辑
使用方法
- 将上述代码复制到新建文件,命名为
wp-ip-login-restrict.php - 上传到WordPress站点的
wp-content/plugins/目录 - 在后台插件列表中激活该插件
内容的提问来源于stack exchange,提问作者Alkrwbmade
相关产品推荐
相关产品推荐

