何为 WordPress 站内搜索伪静态?众所周知,WordPress 默认搜索地址为 http://www.domain.com/?s=keyword ,这是一个动态地址,和全站伪静态有点格格不入,而且还不利于静态缓存。所以我们很有必要把 WordPress 站内搜索变成伪静态。
实现的方法很简单,只需要将以下代码加入到当前主题下的 functions.php 文件当中即可:
- //默认搜索伪静态
- function wp_search_url_rewrite() {
- if ( is_search() && ! empty( $_GET['s'] ) ) {
- wp_redirect( home_url( "/search/" ) . urlencode( get_query_var( 's' ) ) . "/");
- exit();
- }
- }
- add_action( 'template_redirect', 'wp_search_url_rewrite' );
现在去前台搜索,就会发现结果会跳转到【/search/关键词】了。当然,如果动手能力强的话,我们为了让搜索直接进入这个页面,而不是要 301 跳转,我们可以稍微改造一下这个搜索框。
常规搜索框代码一般如下:
- <div id="searchbar">
- <form method="get" id="searchform" action="http://zhang.ge/">
- <input type="text" name="s" id="s" placeholder="输入搜索内容" />
- <button type="submit" id="searchsubmit">搜索</button>
- </form>
- </div>
输入内容,点击搜索后就必然会跳到 ?s=keyword 这个动态页面。所以,我们需要通过 js 代码来拦截这搜索动作,然后重新定义跳转地址,将代码如下修改即可:
- <div id="searchbar"> <form method="get" id="searchform" action="http://zhang.ge/search/">
- <input name="s" id="s" placeholder="请输入搜索内容" onkeydown="if(event.keyCode==13){return Searcher('wp');}">
- <button type="submit" id="searchsubmit" onclick="return Search('wp');">搜索</button>
- </form>
- </div>
- <script type="text/javascript">
- function Search(){
- var value=$("# s ").val()||"";
- window.open("http://zhang.ge/search/"+value+"/");
- return false;
- }
- </script>
很简单的代码,原理就是给【搜索】动作绑定了一个 js 函数,而这个 js 函数的功能就是获取当前输入的关键词,并拼接成一个新的地址,最后跳转过去即可。
如此,就实现了 WordPress 默认站内搜索的伪静态化。很明显,这个方法适合任何 WordPress 主题。如果想让 WordPress 集成多种站内搜索,比如百度、360 嵌入式搜索,请移步阅读本文完整版本——《WordPress 集成多种站内搜索、百度嵌入式搜索,并伪静态化的方法》。
你可能感兴趣的文章
张戈博客 ,版权归原作者所有!转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请发邮件至[email protected],确认后马上更正、删除,谢谢!
版权声明:本文为转载文章,来源于
发表于2017-11-05 21:08 沙发
就喜欢干货,就喜欢折腾,有空折腾起。
@九哥[呲牙] 偶尔是需要折腾一下保持激情的
发表于2017-11-05 21:41 板凳
这个有啥用处呢?收录不需要收录这个吧?
发表于2017-11-05 22:03 地板
搜索结果页面,已经屏蔽了蜘蛛抓取,动态还是伪静态无所谓了。
@我爱动感单车网[呲牙] 纯粹个人喜好
发表于2017-11-06 01:39 4楼
之前做静态化处理的时候 就做了这个
@老鬼进行伪静态处理一下搜索,感觉还不错
发表于2017-11-06 20:53 5楼
表示看完文章后,随即看下博主的搜索功能,发现已用上,这执行力可以阿
@野人摊影视分享[呲牙] 一些比较实用的功能,看中就马上添加上了,这个也是DIY的乐趣
发表于2018-12-12 15:46 6楼
发现一个问题,输入中文就不显示搜索结果 [笑哭]
@男人不可以穷[疑问] 我这边没有任何问题
@懿古今我的也是搜索中文关键词,伪静态域名虽然生效了,但不显示检索结果,请问博主可能是什么原因?
@懿古今可能跟环境应该有关系吧,我的tag如果url都要设置成英文,不然搜索tag找不到页面。
@[email protected][疑问] 这个就不知道了,我根据文中添加之后就可以搜索,至于搜索标签内容就没有认真测试过,建议前往张戈博客留言问问大神看看
@懿古今前两天找到一个Nana3.2版本主题,今天另建了个新站用上了。比如搜索“世界”这个词,得到如下结果:
首页 > 找到 1 篇与 世界 相关的文章
亲!没有您要找的,请返回首页!
搜索结果明明显示找到 1 篇相关文章,但下面没有给出文章链接。
我换到其它主题试了一下,显示结果是正确的,难道是Nana3.2主题的一个小bug?
我看了一下search.php,可是本人php水平捉急,不知道如何解决。
另外在此感谢楼主的无私分享,Nana主题个人超级喜欢!
@懿古今这个问题今天解决了,应该是中文编码问题,在wordpress/wp-includes目录下的class-wp.php文件
$req_uri = str_replace($pathinfo, ”, $req_uri);
后面加上一句
$req_uri = mb_convert_encoding($req_uri, ‘utf-8’, ‘GBK’);
就正常了,就是不知道会不会引出其它问题