免插件限制WordPress搜索频次图文教程

免插件限制WordPress搜索频次图文教程插图

对于WordPress大家都懂,每次都要查询数据库,如果一旦量大的话,非常卡。网上也有不少关于限制WordPress默认搜索的插件,比如search Limiter & Blocker插件,但是只是功能较为简单一点,而且对于搬主题不喜欢使用插件的人来说,能不使用插件就不使用插件。这里搬主题就分享一下免插件限制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报错等,搬主题已经对代码进行了修复。

以上代码超出限制后就反馈500网页,然后提示上述的字眼。

一般限制每分钟限制20-40左右即可,根据自己的实际需要进行调整。

注意:虽然是以搜索为要求,但是实际上涉及到页面的访问都会受牵连,所以最终的数值自己多试几次再进行调整。

原文链接:免插件限制WordPress搜索频次图文教程

 收藏 (0) 更新不易,打赏吧

您可以选择一种方式赞助本站

支付宝扫一扫赞助

微信钱包扫描赞助

除特别注明外,本站所有文章均基于CC-BY-NC-SA 4.0原创,转载请注明出处。
文章名称:《免插件限制WordPress搜索频次图文教程》
文章链接:https://www.xiapilu.com/web/web-tutorial/limit-wordpress-searches-without-a-plugin.html
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录   注册

切换注册

登录

忘记密码 ?

切换登录

注册

我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活