wordpress站内搜索跳转到百度搜索,搜索中文文字被转义乱码的解决方法

最近,白石头博客被刷了一些乱七八糟的词,并且被百度收录了,如下图,以前收录几千个页面,被刷后,现在收录9万多个页面,严重影响了本站的用户体验。

 

这样虽然我的网站没有这个内容,但访问过来都会有下面显示:

最开始我想通过301重定向所有访问地址里面有/?=的来源搜索自动转向网站首页,这样就不会看到这种情况,在宝塔面板试了好久,没有成功。只能通过修改文件实现了这个方法,在当前主题文件夹里面的functions.php加入下面代码,然后保存。

/* WordPress搜索结果中无内容时自动跳转到网站首页 */
add_action('template_redirect', 'redirect_single_post');
function redirect_single_post() {
    if (is_search()) {
        global $wp_query;
        if ($wp_query->post_count == 0 && $wp_query->max_num_pages == 0) {
            wp_redirect( home_url() );
            exit;
        }
    }
}

这样,别人点击这样的垃圾链接的话,就直接跳转到本站首页了,如果是搜索正常关键字,则显示正常搜索页。

还有这下面这种方法,无论有没有搜索结果都自动跳转到首页(此方法没测试过)

//禁用WordPress前台搜索功能
function disable_search( $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_home = true; //跳转到首页
		// $query->is_404 = true;//跳转到404页
	}
}
add_action( 'parse_query', 'disable_search' );
add_filter( 'get_search_form', create_function( '$a', "return null;" ) );

 

第三种方法就是把wordpress站内搜索直接替换成百度搜索。

代码:

//wordpress站内搜索替换为百度搜索
function wp_use_baidu_search( $wp_query ) {
  $s = '';  
  if (isset($wp_query->query_vars['s'])) {
    $s = trim($wp_query->query_vars['s']);
  }
  if (!$s) {  // 空搜索 不进行跳转
    return;
  }
  // 获取当前网站域名
  $host = strtolower($_SERVER['HTTP_HOST']);  
  // 使用 baidu 
  $search_engine = 'https://www.baidu.com/s?ie=UTF-8&wd=';
  $query = urlencode($s . ' site:' . $host);
  // 进行跳 转
  wp_redirect($search_engine . $query);  
  // 不再继续
  exit;
} 
// 加入 替换处理
add_action('parse_query', 'wp_use_baidu_search');

效果如下:

别人点击收录的垃圾链接就是这样的。

最开始测试时,搜索英文或者数字的话,搜索结果是正常的,但搜索中文的话,在百度搜索的中文被转义了,也就是显示乱码。如下图

 

找到好久,才找到解决的方法,找到search的相关代码(一般在header.php),把里面的

<?php echo home_url('/search/'); ?>

修改为:

<?php echo home_url('/?s='); ?>

如果搜索结果前面多个/的话,直接把上面的/去掉就行了。

 

参考文章:

WordPress搜索结果中只有一篇文章时自动打开该文章

wordpress站内搜索更改为百度搜索

THE END