随着文章的不断增加,WordPress的运行速度直线下滑,而作为一个必不可少的搜索功能,搜索文章居然需要6S的时间,这是绝对不能忍受的,而且每次搜索,服务器的CPU爆满,偶尔还会连接超时,我想有必要将搜索功能交给其他程序来完成。
由于WordPress自带的默认搜索功能实用性不强,而且还增加数据库查询次数,建议关闭之,可供替代选择的服务有百度站内搜索、Google站内搜索(已被墙,所以不用考虑了),可以自主搭建站内搜索引擎。

关闭WordPress搜索

从网上找到一段通用的关闭代码,只需要将其加入到functions.php文件即可


function fb_filter_query( $query, $error = true ) {
    if ( is_search() ) {
        $query->is_search = false;
        $query->query_vars[s] = false;
        $query->query[s] = false;
        if ( $error == true )
            $query->is_404 = true;
    }
}
add_action( 'parse_query', 'fb_filter_query' );
add_filter( 'get_search_form', create_function( '$a', "return null;" ) );

但是这段代码有个问题,前台是可以关闭,搜索关键词的时候返回时404页面,但是网站管理后台搜索文章的时候,就搜索不出内容了,后台的搜索也很重要,而且作为网站管理员,搜索时间长点也是可以接受的。

后台不关闭搜索

上面代码中,使用is_search()判断是否是搜索页面,如果是的话就讲查询的变量is_search设置为false,并且返回404网页HTTP状态,告诉用户和搜索引擎,这个页面不存在,既然是判断搜索页面,那么我们在判断一下是否是后台管理就可以了。


function close_search_query( $query, $error = true ) {
    if ( is_search() && !is_admin() ) {
        $query->is_search = false;
        $query->query_vars[s] = false;
        $query->query[s] = false;
        if ( $error == true )
            $query->is_404 = true;
    }
}
add_action( 'parse_query', 'close_search_query' );
add_filter( 'get_search_form', create_function( '$a', "return null;" ) );

这样后台搜索也可以保留,而前台的搜索功能将关闭,接下来你需要选择一个搜索服务,然后将网站的搜索代码修改下,然后搜索的时候跳转到新的搜索界面。