wordpress 搜索结果伪静态导致搜索中文内容乱码的解决方法

  • A+
所属分类:建博笔记

在 wordpress 中如果使用默认的搜索功能搜索时,你会在地址栏看到类似如下的地址:

https://isdola.com/?s=搜索的内容

这种带 ? 的地址其实就是动态地址,后面跟的是动态参数,对 SEO 来说不是很友好,更何况很多时候我们往往已经对博客的固定链接设置成了伪静态的格式,但搜索结果却还是动态地址,显得很不舒服。

于是很多博主就将动态 URL 修改为伪静态形式的地址,看上去像这样:

https://isdola.com/search/搜索的内容

这种形式的 URL 看上去显然要比动态的那种好很多,具体的实现方式可以参考如下代码:

// 修改搜索URL
function change_search_url_rewrite() {
	if ( is_search() && ! empty( $_GET['s'] ) ) {
		wp_redirect( home_url( '/search/' ) . urlencode( get_query_var( 's' ) ) . '/');
		exit();
	}
}

其中:【search】是一个字符串,会出现在地址栏中,表示这是一个搜索结果页面,这个字符串可以自行修改,比如改成【s】,【so】之类的。然后将这段代码复制到主题根目录下的【functions.php】文件中即可,一般情况下都能成功。

恰巧的是,最新的主题也已经集成了这段代码(具体放在了【inc/inc.php】文件中),并在主题选项中可以根据个人需求自行切换使用【默认】(动态)还是【修改搜索 URL】(伪静态)。

当我选择伪静态这种效果时,在前台测试发现,如果搜索的内容是英文的话,搜索结果无任何问题。但是当我搜索中文内容时,发现会搜不到内容,而且在搜索框中会有一些乱码,类似下图:

从图中可以看到,我搜索的内容是“电影”,而且找到了 45 篇相关文章,但搜索结果却提示“没有您要找的文章”,且在下方的搜索框中出现了一堆乱码。

出现这个问题的原因是在对 URL 进行编码时,将空格编码成了加号,因此导致搜索结果不准确。

解决办法

首先:使用下面的代码替换掉上面的代码

// 修改搜索URL
function change_search_url_rewrite() {
	if ( is_search() && ! empty( $_GET['s'] ) ) {
		$back_to_space = str_replace( '+', '%20', urlencode( get_query_var( 's' ) )  );  
		wp_redirect( home_url( "/search/" ) . $back_to_space . "/"); 
		exit();
	}
}

然后:打开主题根目录下的【search.php】文件,找到类似下面这样的代码

$posts = query_posts($query_string . '&orderby=date&showposts='.zm_get_option('search_number'));

在这段代码的上面添加下面的代码即可。

$query_string = urldecode( $query_string );

根据主题的设计不同,这段代码可能在该文件中存在多处,因此需要在每一处前面都添加最后那条代码。

这样修改后,再去前台搜索中文内容时,搜索结果就正常了。

若文章图片、下载链接、网盘密码等信息出错,请留言反馈,博主将第一时间更新!如果喜欢,请打赏支持本站,谢谢大家!
isdola

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: