#教程# – WordPress免插件开启限制搜索页面频率,防止刷搜索页面

前言

最近日志里出现很多刷 wordpress 搜索的日志,导致 CPU 负载有点高,所以这里给出教程限制一下搜索关键字的频率,防止 VPS/服务器宕机。

图片[1] - #教程# – WordPress免插件开启限制搜索页面频率,防止刷搜索页面 - 云线路

教程

添加到主题的 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 秒后才可以再次访问网站,可自定义。

© 本站文章随意转载,但请注明出处!
THE END
点赞7 分享
评论 抢沙发
头像
务必使用真实的邮箱地址评论,虚假邮箱的评论将不通过审核及无回复。
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容