对于WordPress大家都懂,每次都要查询数据库,如果一旦量大的话,非常卡。网上也有不少关于限制WordPress默认搜索的插件,比如search Limiter & Blocker插件,但是只是功…

对于WordPress大家都懂,每次都要查询数据库,如果一旦量大的话,非常卡。网上也有不少关于限制WordPress默认搜索的插件,比如search Limiter & Blocker插件,但是只是功能较为简单一点,而且对于IT168资讯不喜欢使用插件的人来说,能不使用插件就不使用插件。这里IT168资讯就分享一下免插件限制WordPress搜索频次图文教程。
话不多说,直接上代码:
/* 免插件限制WordPress搜索频次代码修复版 更多教程:https://www.banzhuti.com 限制WordPress的搜索频次开始 */ function limit_search_frequency() { // 设置限制的搜索频次 $search_frequency = 25; // 每分钟允许的搜索请求次数 // 检查用户角色 $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(); // 初始化$count变量 $count = isset($cookie_data['count']) ? (int)$cookie_data['count'] : 0; // 如果没有cookie数据,则创建一个新的 if (empty($cookie_data)) { $cookie_data = array( 'timestamp' => $current_time, 'count' => 1 ); setcookie($cookie_name, json_encode($cookie_data), $current_time + 3600, '/'); // 设置为1小时后过期 } else { // 如果存在cookie数据,则更新时间戳和搜索请求次数 $timestamp = $cookie_data['timestamp']; // 如果当前时间戳与上次搜索的时间戳之差大于60秒,则重置搜索请求次数为1,并更新时间戳 if (($current_time - $timestamp) > 60) { $count = 1; } else { // 否则,递增搜索请求次数 $count++; } // 更新cookie数据 $cookie_data = array( 'timestamp' => $current_time, 'count' => $count ); setcookie($cookie_name, json_encode($cookie_data), $current_time + 3600, '/'); // 更新cookie的过期时间 } // 如果搜索请求次数超过限制,则显示错误信息并阻止搜索请求 if ($count > $search_frequency) { wp_die('搜索频率超过每分钟 ' . $search_frequency . ' 次,限制访问 60 秒,请稍后再试...多次提醒后会封禁 IP!'); } } // 将函数绑定到pre_get_posts钩子 add_action('pre_get_posts', 'limit_search_frequency'); /* 限制的搜索频次结束*/
把以上代码放到WordPress主题的functions.php即可。网上虽然也放出类似的代码,但是有部分报错,包括没有定义数值导致PHP报错等,IT168资讯已经对代码进行了修复。
以上代码超出限制后就反馈500网页,然后提示上述的字眼。
一般限制每分钟限制20-40左右即可,根据自己的实际需要进行调整。
注意:虽然是以搜索为要求,但是实际上涉及到页面的访问都会受牵连,所以最终的数值自己多试几次再进行调整。
原创文章,作者:admin,如若转载,请注明出处:https://www.it168.online/webtech/13042/