前言
最近日志里出现很多刷 wordpress 搜索的日志,导致 CPU 负载有点高,所以这里给出教程限制一下搜索关键字的频率,防止 VPS/服务器宕机。
教程
添加到主题的 functions.php 文件里即可实现WordPress限制搜索页面频率:
/** 限制的搜索频次 */
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 '<div class="class="zib-widget ajaxpager search-content type-post">';
echo '<div class="text-center ajax-item " style="padding:140px 0;">';
echo '<img style="width:380px;opacity: .7;" src="/wp-content/themes/zibll/img/null-search.svg">';
echo '<div style="padding:10px 0;"><h1>搜索限制</h1></div>';
echo '<p style="margin-top:20px;" class="em09 muted-3-color separator">搜索频率为每分钟 10 次,请 60 秒后再尝试其他操作</p>';
echo '</div>';
echo '</div>';
// 获取 WordPress 尾部
get_footer();
exit; // 确保后续代码不被执行
}
}
// 在 WordPress 的"wp"挂钩上执行搜索频率限制检查
add_action('wp', 'limit_search_frequency');
结语
代码限制为每分钟搜索 10 次,超出限制访问 60 秒后才可以再次访问网站,可自定义。
© 本站文章随意转载,但请注明出处!
>> 如果您觉得本站文章对您有所帮助,购买 VPS 时候请走本站AFF链接!
>> 某些文章具有时效性,若内容有错误或已失效,欢迎在下方评论区留言向我们反馈.
>> 所有文章均基于分享的原则,所有言论均个人观点,请注意全部都不是推荐,是分享!分享!分享!
>> 所有文章均基于分享的原则,所有言论均个人观点,请注意全部都不是推荐,是分享!分享!分享!
THE END
暂无评论内容