CPU负载升高次数有点多,检查日志是有IP刷搜索页面,网上找了下代码记录下来,方便下次参考。
修改主题文件functions.php,添加如下代码:
/** 限制的搜索频次 */
function limit_search_frequency() {
// 如果当前页面不是搜索页面,则不进行频次限制
if (!is_search()) {
return;
}
// 设置限制的搜索频次
$search_frequency = 11; // 每分钟允许的搜索请求次数
// 检查用户角色
$user = wp_get_current_user();
$user_roles = $user->roles;
// 如果用户角色包含管理员角色,则不进行频次限制
if (in_array('administrator', $user_roles)) {
return;
}
// 获取当前时间戳
$current_time = time();
// 获取存储搜索请求次数和时间戳的 cookie 键名
$cookie_name = 'search_frequency';
$cookie_data = isset($_COOKIE[$cookie_name]) ? json_decode(stripslashes($_COOKIE[$cookie_name]), true) : array();
// 如果没有 cookie 数据,则创建一个新的
if (empty($cookie_data)) {
$cookie_data = array(
'timestamp' => $current_time,
'count' => 1
);
setcookie($cookie_name, json_encode($cookie_data), $current_time + 60, '/');
} else {
// 如果存在 cookie 数据,则更新时间戳和搜索请求次数
$timestamp = $cookie_data['timestamp'];
$count = $cookie_data['count'];
// 如果当前时间戳与上次搜索的时间戳之差大于 60 秒,则重置搜索请求次数为 1,并更新时间戳
if (($current_time - $timestamp) > 60) {
$count = 1;
$timestamp = $current_time;
} else {
// 否则,递增搜索请求次数
$count++;
}
// 更新 cookie 数据
$cookie_data = array(
'timestamp' => $timestamp,
'count' => $count
);
setcookie($cookie_name, json_encode($cookie_data), $current_time + 60, '/');
}
// 搜索请求次数超过限制,则显示错误信息
if ($count > $search_frequency) {
// 获取 WordPress 头部
get_header();
// 显示错误消息
echo '';
echo '';
echo '
';
echo '搜索限制
';
echo '搜索频率为每分钟 10 次,请 60 秒后再尝试其他操作
';
echo '';
echo '';
// 获取 WordPress 尾部
get_footer();
exit; // 确保后续代码不被执行
}
}
// 在 WordPress 的"wp"挂钩上执行搜索频率限制检查
add_action('wp', 'limit_search_frequency');











![[黑五]vmiss:全场VPS/独立服务器7折起,美国/韩国/日本/香港VPS年付106元起,可选CN2 GIA/AS9929/CMIN2线路-赵容部落](https://www.zrblog.net/wp-content/uploads/2022/05/vmiss.png)
![[黑五]HostDare低至3.5折+双倍内存+双倍流量,洛杉矶VPS年付9.1美元起,可选AMD EPYC,可选CN2 GIA+AS9929+CMIN2线路-赵容部落](https://www.zrblog.net/wp-content/uploads/2016/06/hostdare.png)
![[11.11]搬瓦工全场8.9折优惠码,可选香港/日本/美国/加拿大/荷兰/阿联酋等多机房,大带宽CN2 GIA线路-赵容部落](https://www.zrblog.net/wp-content/uploads/2013/11/bandwagonhost.jpg)