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='); ?>
如果搜索结果前面多个/的话,直接把上面的/去掉就行了。
参考文章:
声明:
1.本站主要是为了记录工作、学习中遇到的问题,可能由于本人技术有限,内容难免有纰漏,一切内容仅供参考。
2.本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!
3.本站所有原创作品,包括文字、资料、图片、网页格式,转载时请标注作者与来源。
1.本站主要是为了记录工作、学习中遇到的问题,可能由于本人技术有限,内容难免有纰漏,一切内容仅供参考。
2.本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!
3.本站所有原创作品,包括文字、资料、图片、网页格式,转载时请标注作者与来源。
THE END