WordPress主题开发中定制个性搜索功能思路

对搜索功能有多个个性化需求,一个是搜索指定时间段儿内包含某个关键词的文章(文章类型 post),另外一个是只搜索包含某个关键词的产品文章(文章类型 product),当然还有一个不指定条件的默认搜索功能,默认搜索功能就不说了,这个大家应该都懂。

就拿上面这种搜索指定时间段儿内包含某个关键词的文章的搜索功能来说吧。首先,默认的搜索框代码是:

<form method="get" action="<?php echo esc_url( home_url( '/' ) ); ?>">
	<input type="search" name="s" value=""/>
	<button type="submit" class=""></button>
</form>

用心的朋友应该会发现,使用默认的搜索输入关键词搜索后,搜索结果页面链接的后缀格式是?s=关键词。

注意一下链接中的 s,是不是和搜索框中的输入关键词的 input 输入框的 name 值是一样的?是的,这其实就是通过链接传递过来的内容。而你输入的关键词,其实就是 input 中的 value 值。我们知道 wordpress 搜索结果呈现也是 search.php 这个文件,这个文件里的代码其实只是做了个判断是否有文章,有的话按照指定格式显示出来,换句话说这个文件的默认代码和 archive.php 里的代码是一样的,因为这个文件就是 WordPress 默认的搜索结果页,就像 category.php 是默认的分类页一样,他会默认的显示包含你搜索的关键词的文章列表。

那么如果我们需要再增加一些搜索条件限制的话应该怎么操作呢?其实很简单,先修改搜索框代码,比如我们要加上开始时间和结束时间限制,那么就可以修改如下:

<form method="get" action="<?php echo esc_url( home_url( '/' ) ); ?>">
    <input type="search" name="s" value=""/>
    <input type="search" name="kssj" value=""/>
    <input type="search" name="jssj" value=""/>
    <button type="submit" class=""></button>
</form>

里面多了两个 input,两个的 name 分别是 kssj(开始时间),jssj(结束时间),当然这里面是让用户直接输入时间的,这样用户体验并不好,你可以使用相关 js 做成日期选择的形式,这里就不多介绍了。

搜索框做好以后,你可以输入关键词、开始时间、结束时间都输入信息后,点击搜索,这个时候会跳转到一个新的页面,当然,这个时候并不会按照你输入的时间段儿显示。先不急,看一下浏览器中的链接格式是不是和默认的搜索结果页不同了?是的,变成了后缀是?s=关键词&kssj=开始时间&jssj=结束时间。肯定是的,这也就是说你在搜索框中输入的搜索条件和关键词都已经通过链接传递到了搜索结果页面,我们可以很轻松的通过$_GET['name 值']来获取到对应的关键词或搜索条件,根据上面的链接我们可以得到 $_GET['s] (关键词)、 $_GET['kssj] (开始时间) 、 $_GET['jssj] (结束时间) 。

能获取到这些信息,我们仔细想一下,那不就是在搜索结果页面使用文章查询功能,查询到符合这些条件的文章然后用列表的形式显示出来就行了吗?代码如下:

<?php 
   $args = array(
      'post_type' => 'post',//指定文章类型,也可以不指定
      'date_query' => array(  //日期筛选项 
          array(   
             'after'     => $_GET['sdate'], //开始时间
             'before'    => $_GET['edate'], //结束时间  
             'inclusive' => true, //是否包含开始时间和结束时间当前时间的文章  
           ),                                             
       ),
       's' => $_GET['s'],  //搜索的关键词 
    );                
    $the_query = new WP_Query( $args );
?>
<?php if ( $the_query->have_posts() ) : ?>
<?php while($the_query->have_posts()):$the_query->the_post();?>
这里是循环输出的文章列表样式,想怎么弄怎么弄
<?php endwhile;?>
<?php else :?>
没有相关文章
<?php endif;?>

代码就是上面的代码,用在什么地方呢?把 search.php 中循环输出列表的地方换掉就行了。

那另外一种,就是搜索指定文章类型的文章,比如只搜索产品(文章类型 product),同样的道理,先修改搜索框代码,然后搜索结果页通过文章查询来显示就行了。

当然,我们知道默认的搜索结果页只有一个页面模板 search.php,有时我们需要不同的搜索,结果页呈现不同的样式,这个时候怎么办呢?也很简单,根据你所有的搜索然后先创建不同的搜索结果页,然后把 search.php 文件的内容改成一个判断,不同的条件,加载不同的搜索结果页模板就行了。比如,产品(文章类型 product)和文章(文章类型 post)结果页使用不同的模板,那就可以把 search.php 改成:

<?php 
if ($_GET['post_type']=='product') { //前提是搜索框代码中有一个name="post_type"的input,value要设置为product
    get_template_part( 'search', 'product');
} else {
    get_template_part( 'search', 'default');
}
?>

上面所说的是一个思路,大家可以根据这个思路去定制自己不同需求的搜索功能,比如搜索指定 id 的文章,指定标题的文章等等。使用方法上面的也只是个参考,不同的需求代码写法不同,但是思路是一致的。希望这些对有类似需求的朋友有所帮助

http://xzh.i3geek.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请不要用于商业用途及非法用途,否则后果自负!
3. 如果你也有好源码或者教程,可以到审核区发布,分享有金币奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"qq301.com",如遇到无法解压的请联系管理员!
资源客是一个优秀的分享资源站,本站资源均为各位友友分享而来,特殊原创会标明如有侵犯版权等可联系删除

资源客 » WordPress主题开发中定制个性搜索功能思路